【问题标题】:Javascripts added via appendChild don't seem to run通过 appendChild 添加的 Javascript 似乎没有运行
【发布时间】:2011-09-29 21:32:36
【问题描述】:

我有一个 javascript 文件被动态添加到页面中。如果我使用 document.write,它可以正常工作:

<html>
<head></head>
<body>
    <script type="text/javascript">
          var src = 'myDynamicScript.js';
          document.write('<scr' + 'ipt type="text/javascript" src="' + src + '"></scr' + 'ipt>');
    </script>
</body>
</html>

但是,如果我使用 appendChild,如 this answer 中所述,脚本会被下载,但永远不会运行:

<html>
<head></head>
<body>
    <script type="text/javascript">
          var src = 'myDynamicScript.js';
          var script = document.createElement("script");
          script.type  = "text/javascript";
          script.src   = src;
          document.body.appendChild(script);
    </script>
</body>
</html>

我有一个简单的示例设置here (write)here (append)。我应该期望它运行,还是这是已知的行为?如果应该,为什么不呢?

【问题讨论】:

    标签: javascript appendchild dynamic-script-loading


    【解决方案1】:

    您的脚本运行良好,只是无法通过它document.write。使用警报或其他东西来测试它,并完全避免使用document.write

    【讨论】:

    • 为什么我不能使用 document.write(除了它是“邪恶的”)?我的意思是为什么在这种特殊情况下被禁止?
    • 这不是禁止的,但它会在原始文档(即您的主页)已经关闭之后发生。当你进行后续的“write()”操作时,原来的页面会被丢弃。
    • 实际上,@Pointy 似乎恰恰相反——据我所知,appendChild-ed 脚本中的 document.write 要么永远不会发生,要么以某种方式被主页覆盖。如果我把它放在一个 setTimeout 中,那么我可以让它覆盖我的主页。
    【解决方案2】:

    您的示例在 Safari 中对我有用。以下是一些问题:

    您正在测试哪些浏览器? (猜你在 IE 上遇到了麻烦。) 您是从服务器尝试此操作,而不仅仅是将 index.html 拖到浏览器中吗?
    页面上还有什么可能阻止 myDynamicServer.js?
    有东西劫持了window.onload吗?
    您是否尝试将 myDynamicServer.js 附加到 document.getElementsByTagName('BODY')[0] 而不是 document.body?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 2015-09-22
      • 2021-11-27
      • 2022-12-04
      相关资源
      最近更新 更多