我们有一些JavaScript将脚本包括在我们的网页中的动态资源中,以便我们能够在不同服务器提供的页面之间传递一些信息,这些服务受到跨站点脚本限制。
这个想法是浏览器请求由服务器端的动态资源提供服务的JavaScript文件(它还将一些服务器端信息放入请求中)。然后,当浏览器添加到页面时,浏览器会执行该JavaScript文件。
我们遇到了Internet Explorer的问题,当响应中返回的JavaScript在添加到页面时间歇性地不执行时。发生问题时检查Fiddler HTTP跟踪显示脚本已成功返回到浏览器。
为了更可靠地测试它,我改变了添加脚本的代码,在循环中运行1000次,如下所示:
for (var i = 1; i <= 1000; i++) {
try {
var script = document.createElement("SCRIPT");
script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i;
script.id = token;
document.getElementsByTagName("HEAD")[0].appendChild( script );
} catch (e) {
alert(e);
}
}
ajavascriptfile.js
返回的脚本只会在我的页面上增加一个计数器:
var output = document.getElementById("output");
output.innerHTML = parseInt(output.innerHTML) + 1;
此测试中没有任何异常被捕获或警告。
如果这样正确执行,计数器应该达到1000(在Firefox中也是如此)。然而在IE6中它平均为900-950,IE7约为995-998,而IE8则令人震惊750-800。
是否有其他人遇到Internet Explorer没有执行动态包含的脚本?如果是这样,你知道如何解决这个问题吗?
答案 0 :(得分:1)
可能是脚本没有按照它们添加到头部的顺序排队,但是一旦它们的活动状态完成,就会从缓存或下载中解释。如果您要求的最后一个脚本首先加载,则可能会导致问题。
IE8允许6个并发脚本,我认为IE7允许4个,6个允许2个。
我在Opera,Chrome和Safari中也见过这个,(但还没有firefox)所以如果我加载多个脚本,我会保持运行任何命令,直到我知道资源可用 - 通常是通过测试类型来自所需文件的函数,以及未找到的计时器回调。
答案 1 :(得分:0)
Internet Explorer可能正在缓存脚本文件。尝试在src中添加一些额外的熵包括:
script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i + '&r=' + Math.random();