2010-03-08 78 views
6

我在我的網站上安裝了一些跟蹤腳本和Web服務,並且我注意到其中一個服務出現故障時,它仍嘗試調用託管在另一個服務器上的外部JavaScript文件。在Firefox,Chrome和其他新瀏覽器中,當其中一項服務關閉時,似乎沒有任何問題。但是,在IE7和IE8中,在顯示所有內容之前,我的頁面不會全部加載並超時。有什麼方法可以在這些javascript調用中添加超時以防止它們在停止時打破我的頁面?外部Javascript超時

回答

5

你可以用JS頁面加載後動態加載它們。如果JS文件位於不同的服務器上,那麼瀏覽器仍然會顯示「瀏覽器繁忙」指示符,但是原始頁面會加載。

如果你可以從你自己的站點獲取JS,你可以在加載頁面後加載XMLHttpRequest(或者使用你最喜歡的JS庫的助手,例如jQuery的$.ajax(...)),然後對它進行評估。通過這種方式,抓取本身不會顯示瀏覽器繁忙指示符。

要從您自己的站點獲取JS,您可以從您的跟蹤提供程序(它不會被官方支持但通常可用)下載它 - 只需記住每隔一段時間重新獲取新版本,或者您可以創建您自己的網站上的「轉發」服務,從跟蹤提供商處獲取並在本地緩存一段時間。這樣你的JS就不會有過時的危險。

Steve Souders有關於deferred loading of scripts and browser-busy indicators的更多信息。

+0

+1這是一個很好的鏈接。 – 2010-03-08 20:01:46

2

嘗試增加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"); 
    ... 
} 
+0

不支持跨所有瀏覽器:( – orip 2010-03-08 19:46:29

+0

耶我不認爲這是行得通的。我認爲真正的問題是IE瀏覽器試圖連接到外部的JS文件,默認超時設置得太高firefox和其他瀏覽器似乎很快知道該文件沒有響應,並相應地繼續前進,我不知道是否有任何方法來防止...... – mike 2010-03-08 19:49:15

+0

那麼你可以使用JavaScript加載外部JavaScript文件,而不是HTML。 '