【问题标题】:How can I tell a dynamically inserted <script> tag to… run我如何告诉动态插入的 <script> 标签...运行
【发布时间】:2011-02-11 20:36:39
【问题描述】:

我正在动态插入带有src 属性但没有内容的&lt;script&gt; 标记。但是浏览器不会在插入后拉下那个 src 并运行脚本——标签只是在 DOM 中。

我可以告诉浏览器“运行”脚本标签吗?

由于我正在使用其他代码,因此我更容易通过src 属性获取代码,而不是自己获取代码并将其插入到标记的正文中——但如果有必要的话,我也可以这样做(欢迎任何建议)。

使用请求的信息进行更新

  1. 脚本标签在页面加载后根据用户交互插入任意次数
  2. 我插入了这样的标签(jquery 的 html 函数去除脚本标签):document.getElementById("my-div").innerHTML = "the script tag, which stack overflow wants to strip";

【问题讨论】:

  • 您可以将插入的.js文档的内容包装在一个函数中,并在插入后调用它
  • 你是在用window.write插入脚本标签吗?
  • 尝试@ksiegel 的建议并使用Firebug 或HTTP Watch 等流量监控器查看是否检索到脚本。

标签: javascript jquery dom


【解决方案1】:

试试下面的代码:: 它的工作

  var script = document.createElement( 'script' );
  script.type = 'text/javascript'; 
  script.src =MY_URL; 
  $("#YOUR_ELEMNT_ID").append( script );

【讨论】:

  • 现在试试。由于某种原因,追加不会将脚本对象附加到我的 div。我尝试附加一些其他任意文本,它确实有效。还在尝试中……
  • 越来越近……似乎从var preview_script = $( 'script' );开始运气更好
  • 我的意思是var preview_script = $('&lt;script&gt;&lt;/scr' + 'ipt&gt;');
  • 让它工作,通过没有 jquery -- Manish,我用对我有用的代码编辑了你的答案 -- 如果你同意,请检查并接受它。
【解决方案2】:

它应该在浏览器将脚本插入 dom 后立即运行,但您可以尝试将脚本包装成一个函数并在脚本加载后调用该函数:

var script = document.createElement('script');
script.setAttribute('type','text/javascript'); 
script.setAttribute('src',script_url); 
script.onreadystatechange= function () {
    if (this.readyState == 'complete') 
        initScript();//the whole script is wrapped in this function
}
script.onload= initScript;

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    您可以在主脚本中设置一个 setTimeout 来检查新脚本是否存在。如果存在,则运行它。你知道它是下载文件还是什么都不做?检查 Chrome 的网络监视器。

    我认为也有一种不带 src= 标签的动态加载 Javascript 的方法,但我没有亲自做过。

    为什么不预先加载所有的 javascript 并通过一些内联 JS 来执行它?

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2017-07-12
      • 2013-09-21
      • 2011-04-20
      • 1970-01-01
      • 2018-07-28
      • 2019-05-04
      • 1970-01-01
      • 2015-06-07
      相关资源
      最近更新 更多