簡體   English   中英

IE間歇性地不執行動態添加的腳本文件

[英]IE intermittently doesn't execute a dynamically added script file

我們有一些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);
    }
}

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沒有執行動態包含的腳本? 如果是這樣,你知道如何解決這個問題嗎?

可能是腳本沒有按照它們添加到頭部的順序排隊,但是一旦它們的活動狀態完成,就會從緩存或下載中解釋。 如果您要求的最后一個腳本首先加載,則可能會導致問題。

IE8允許6個並發腳本,我認為IE7允許4個,6個允許2個。

我在Opera,Chrome和Safari中也見過這個,(但還沒有firefox),所以如果我加載多個腳本,我會保持運行任何命令,直到我知道資源可用 - 通常是通過測試函數的類型所需文件,如果找不到,則返回計時器回調。

Internet Explorer可能正在緩存腳本文件。 嘗試在src中添加一些額外的熵包括:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM