IE间歇性地不执行动态添加的脚本文件

jam*_*unt 9 javascript internet-explorer

我们有一些JavaScript将脚本包括在我们的网页中的动态资源中,以便允许我们在服务于不同服务器的页面之间传递一些信息,这些服务器受到跨站点脚本限制.

这个想法是浏览器请求由服务器端的动态资源提供服务的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

返回的脚本ajavascriptfile.js只需在页面上增加一个计数器:

var output = document.getElementById("output");
output.innerHTML = parseInt(output.innerHTML) + 1;
Run Code Online (Sandbox Code Playgroud)

在此测试中没有捕获或警告异常.

如果这正确执行,计数器应该达到1000(它在Firefox中执行).然而在IE6中平均为900-950,IE7为995-998,IE8为750-800.

有没有其他人遇到Internet Explorer没有执行动态包含的脚本?如果是这样,你知道如何解决这个问题吗?

lee*_*ers 0

Internet Explorer 可能正在缓存脚本文件。尝试向 src include 添加一些额外的熵:

script.src = serverHome + "/ajavascriptfile.js?token=" + token + "&num=" + i + '&r=' + Math.random();
Run Code Online (Sandbox Code Playgroud)