为了账号安全,请及时绑定邮箱和手机立即绑定

动态更改脚本源不起作用

动态更改脚本源不起作用

慕莱坞森 2023-08-05 19:40:58
我有两个文件。HTML 文件:<!DOCTYPE html><html>    <head>        <script type="text/javascript">function update_layout(){    var new_source = document.createElement('script')    new_source.src = 'script_code.js'    new_source.type = 'text/javascript'    document.getElementsByTagName('head')[0].appendChild(new_source)}function do_layout(){    alert(Lay_Table['nam'])}        </script>    </head>    <body>        <input type="button" value="Update" onclick="update_layout();do_layout();"/>    </body></html>和一个名为“script_code.js”的 JavaScript 文件:Lay_Table = {}Lay_Table['nam'] = 'US 104 Key'当我单击“更新”按钮时,我收到错误,而不是包含文本“US 104 Key”的警报。我在 Stack Overflow 上查看过非常类似的问题,但无法找出问题所在。我是否犯了一个错误,或者由于安全原因不再允许使用此方法?我正在使用谷歌浏览器。
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

该脚本需要一些时间才能插入到文档中并运行 - 它不会立即发生,因此Lay_Table在运行时没有及时定义do_layoutload考虑向插入的标签添加一个侦听器(并避免内联处理程序,它们现在有太多不值得使用的问题,例如疯狂的作用域链和引用转义问题):


window.addEventListener('DOMContentLoaded', () => {

  document.querySelector('input').addEventListener('click', update_layout);

});

function update_layout()

{

    var new_source = document.createElement('script')

    new_source.src = 'script_code.js'

    new_source.addEventListener('load', do_layout);

    document.head.appendChild(new_source)

}


查看完整回答
反对 回复 2023-08-05
  • 1 回答
  • 0 关注
  • 55 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信