2010-09-07 59 views
1

我通過將JS文件附加到HTML頭來異步下載JS文件。 現在在html正文中,在使用JS文件之前,我想檢查JS文件是否已經下載並存在於緩存中。 如果JS文件不存在於緩存中(例如:在互聯網連接速度較慢的情況下),我想阻止它直到下載。 換句話說,如果JS下載不完整,我想模擬阻止JS下載的情況下的行爲。如何阻止JS下載未完成

任何想法如何實現?

回答

1

可以實例化的任何對象在JS文件和HTML文件,你可以檢查,如果該對象可使用typeof運算所以如果typeof運算(X)是未定義的,你可以假設該文件還沒有下載

0

如果你可以控制HTMl文件和JS文件:在已經加載的代碼中的某處定義一個「回調」函數,並從JS文件的末尾調用它。例如功能:

<html> 
    <head> 
    <script> 
    function notify_file_is_loaded(identifier) { 
     if (identifier === 'somefile.js') { 
     // it's loaded! 
     // run the code that (in synchronous mode) you'd block for 
     } 
    } 
    </script> 
<!--- ... ---> 

和JS文件:

// somefile.js 
// some JS code goes here 
// ...snip... 
notify_file_is_loaded('somefile.js'); 
+0

就算我能找到的是JS還沒有準備好,我怎麼能等待它被下載。如果我不阻止,我會得到JS錯誤。 – user441258 2010-09-07 09:47:07

+0

我解決這個案子的方式是通過在頭部觸發異步下載,並在使用該JS之前,我嘗試使用標籤同步下載JS文件。如果第一個JS下載已經完成,則第二個下載從緩存中拾取Js,否則以下載方式下載。該JavaScript文件沒有自我執行的代碼,所以沒有對象被實例化兩次 – user441258 2010-09-07 09:48:38

0

獲取JS同步來代替。只需在html > head附加一個腳本標籤src="<script-location>",瀏覽器將同步執行此下載。

在這裏玩: 這是一種糟糕的用戶體驗阻塞,直到有東西下載。如果您使用優雅降級原則編寫代碼,則頁面應只激活可用的功能。你會讓另一個Web開發人員承擔這個責任嗎?不,我不會 - 我會關閉該標籤,並繼續:)

0

是否按照JavaScript加載JavaScript文件?如果是這樣,你應該能夠使用onload事件處理程序中執行代碼後的JavaScript文件已加載:

<script> 
    var js = document.createElement('script'); 
    js.onload = function() { 
     // your code goes in here 
    } 
    js.src = 'foo.js'; 
    document.body.appendChild(js); 

</script> 
+0

我在我的代碼中很早就追加了JS。這會很早觸發JS的異步下載。這是一個非常大的JS文件,需要大量的時間來下載和我的網站上的許多功能使用這個JS文件。現在,在任何功能使用此JS文件之前,我需要確保JS可用。一種選擇是在檢查下使用這個JS的代碼來測試JS是否準備好,但是使用這個JS的代碼是分散的。我正在尋找一個解決方案,在使用JS之前,我可以檢查JS是否可用。如果JS不可用,我想阻止渲染以避免JS錯誤。 – user441258 2010-09-07 14:44:47