【问题标题】:jQuery dynamic script tag addition causes IE9 to request src twicejQuery动态脚本标签添加导致IE9请求src两次
【发布时间】:2011-07-07 00:52:19
【问题描述】:

刚刚在 IE9 中发现了一些非常奇怪的东西(有多不寻常?)

我有以下代码来克服跨域限制并加载在 localhost 上运行的 javascript

 var url = 'http://local.maglnk.com:45099/download/?info_hash='+info_hash;
 var scriptTag = $('<script />').attr('src',url);
 scriptTag.appendTo('body');

此代码在 IE9 以外的任何浏览器上都可以正常工作,奇怪的是 IE9 两次请求脚本标签的 url,第二次它在末尾附加某种时间戳网址

 http://local.maglnk.com:45099/download/?info_hash=6eabb12b8bf344feba7d323c940c18d096771b99&_=1309998922080)

我不确定 jQuery 在动态附加脚本标记时是否添加了尾随“&_=1309998922080”,或者 IE 是否正在执行某种预编译或预解析,在这种情况下我来问如果有办法通过 javascript 停止该机制。

如果您遇到过这样的事情,请留言。

【问题讨论】:

  • 你试过$('&lt;script type="text/javascript" /&gt;'),以防它窒息......
  • 在 IE9 中使用 jQuery 附加脚本标签时,我注意到初始请求似乎总是从服务器获得 304 响应。看起来当 jQuery 在 IE 中获得 304 时,它会立即发送带有时间戳作为 URL 变量的第二个请求,以防止任何缓存脚本的机会。

标签: javascript jquery internet-explorer-9


【解决方案1】:

如果你使用 jQuery,为什么不使用jQuery.getScript

【讨论】:

    【解决方案2】:

    找到了解决办法。

    不要使用 appendTo() jQuery 方法。而是使用 $.getScript(url) 并且问题消失了。

    所以,当您动态添加脚本标签时,似乎是 IE9 的 jQuery 问题。

    干杯。

    【讨论】:

    • 啊.. 酷 +1。很好,你可以忽略我在问题中的评论:)
    • 我认为它更准确地说是一个旧的 IE 问题,JQuery 试图以一种愚蠢的方式处理,最终在所有浏览器中重复相同的问题。附加时,旧版本的 IE 会触发两次脚本。当我发号施令时,我完全避免通过附加的脚本标签放入可执行代码。根据我的经验,让您的 JS 处理更改 HTML 比 HTML 更改您的 JS 更理想。
    【解决方案3】:

    在某些情况下$.getScript() 可能不合适,因为它会打乱加载的 javascript 文件的顺序。那是因为它是异步的。如果动态加载的 JavaScript 文件相互依赖,就会出现问题。

    在这种情况下,您需要这样做:

    $( document.body ).append( $( '&lt;script src="hello.js"&gt;&lt;/script&gt;' ) );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 2022-01-06
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      相关资源
      最近更新 更多