我在我的網站上安裝了一些跟蹤腳本和Web服務,並且我注意到其中一個服務出現故障時,它仍嘗試調用託管在另一個服務器上的外部JavaScript文件。在Firefox,Chrome和其他新瀏覽器中,當其中一項服務關閉時,似乎沒有任何問題。但是,在IE7和IE8中,在顯示所有內容之前,我的頁面不會全部加載並超時。有什麼方法可以在這些javascript調用中添加超時以防止它們在停止時打破我的頁面?外部Javascript超時
回答
你可以用JS頁面加載後動態加載它們。如果JS文件位於不同的服務器上,那麼瀏覽器仍然會顯示「瀏覽器繁忙」指示符,但是原始頁面會加載。
如果你可以從你自己的站點獲取JS,你可以在加載頁面後加載XMLHttpRequest
(或者使用你最喜歡的JS庫的助手,例如jQuery的$.ajax(...)
),然後對它進行評估。通過這種方式,抓取本身不會顯示瀏覽器繁忙指示符。
要從您自己的站點獲取JS,您可以從您的跟蹤提供程序(它不會被官方支持但通常可用)下載它 - 只需記住每隔一段時間重新獲取新版本,或者您可以創建您自己的網站上的「轉發」服務,從跟蹤提供商處獲取並在本地緩存一段時間。這樣你的JS就不會有過時的危險。
Steve Souders有關於deferred loading of scripts and browser-busy indicators的更多信息。
嘗試增加defer="defer"
defer屬性給出了一個提示 腳本不 創建任何內容,這樣瀏覽器就可以 可選推遲解釋 腳本的瀏覽器。這可以通過延遲執行腳本來提高性能 ,直到主體內容被解析後 ,並且 呈現。
編輯
這將防止這些腳本的運行,直到頁面加載:
function loadjs(filename) {
var fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filename);
}
window.onLoad = function() {
loadJs("http://path.to.js");
loadJs("http://path.to2.js");
...
}
不支持跨所有瀏覽器:( – orip 2010-03-08 19:46:29
耶我不認爲這是行得通的。我認爲真正的問題是IE瀏覽器試圖連接到外部的JS文件,默認超時設置得太高firefox和其他瀏覽器似乎很快知道該文件沒有響應,並相應地繼續前進,我不知道是否有任何方法來防止...... – mike 2010-03-08 19:49:15
那麼你可以使用JavaScript加載外部JavaScript文件,而不是HTML。 '
+1這是一個很好的鏈接。 – 2010-03-08 20:01:46