2010-02-11 31 views
9

我們有一些JavaScript將腳本寫入到我們網頁中的動態資源中,以便允許我們在不同服務器提供的頁面之間傳遞一些信息跨站點腳本限制。IE間歇性地不執行動態添加的腳本文件

這個想法是,瀏覽器請求由服務器端的動態資源提供的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

你有沒有在頁面中聲明的'? – 2010-02-11 04:05:07

+0

不,我沒有頁面上的。 – 2010-02-11 20:06:19

+0

我正在解決這個問題,但我不確定whyat是錯的! – JustEngland 2014-01-28 23:02:04

回答

0

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

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

''&num =「+ i'對於每個請求都是唯一的,所以緩存不應該成爲問題。如果我刪除了''&num =「+ i',IE7只向服務器發出一個請求,計數器幾乎立刻就達到1000。另請注意,在正常情況下(首次遇到此問題),只有一個請求。我只需要1000次就可以更可靠地重現它。 – 2010-02-11 03:34:19

+0

在生產系統中,高速緩存可能仍然是一個問題 - 也就是說,每次在生產環境中請求時,腳本URL是否都是唯一的?無論哪種方式(無論是在測試循環還是在生產環境中),IE的行爲都是意外/中斷的。 – leepowers 2010-02-11 03:54:41

+0

@James:即使使用#號,IE也可能會緩存,具體取決於您在測試期間請求了多少次相同的URL。正如pygorex1所說,添加更多的熵。也許是時間戳值或類似的東西。 – NotMe 2010-02-11 04:01:40

1

這可能是因爲腳本是不是在它們加入到頭部的順序排隊,但因爲他們是ActiveState公司完成正在儘快解釋,無論是從緩存還是下載。如果您最後加載的腳本首先加載,則會導致問題。

IE8允許6名併發的腳本,我認爲IE7允許4和6允許2

我已經在Opera,Chrome和Safari看到了這一點爲好,(但不火狐還沒有),所以如果我加載更多除了一個腳本之外,我持有運行任何命令,直到我知道資源可用爲止 - 通常通過測試所需文件中的函數的類型,以及如果未找到,則使用定時器回調。

+0

這可能是這種情況。但是,在將單個腳本添加到頁面時,我再現了此問題。我添加了循環,以便能夠更可靠地重現問題。 – 2010-02-11 20:07:15

相關問題