我通過將JS文件附加到HTML頭來異步下載JS文件。 現在在html正文中,在使用JS文件之前,我想檢查JS文件是否已經下載並存在於緩存中。 如果JS文件不存在於緩存中(例如:在互聯網連接速度較慢的情況下),我想阻止它直到下載。 換句話說,如果JS下載不完整,我想模擬阻止JS下載的情況下的行爲。如何阻止JS下載未完成
任何想法如何實現?
我通過將JS文件附加到HTML頭來異步下載JS文件。 現在在html正文中,在使用JS文件之前,我想檢查JS文件是否已經下載並存在於緩存中。 如果JS文件不存在於緩存中(例如:在互聯網連接速度較慢的情況下),我想阻止它直到下載。 換句話說,如果JS下載不完整,我想模擬阻止JS下載的情況下的行爲。如何阻止JS下載未完成
任何想法如何實現?
可以實例化的任何對象在JS文件和HTML文件,你可以檢查,如果該對象可使用typeof運算所以如果typeof運算(X)是未定義的,你可以假設該文件還沒有下載
如果你可以控制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');
獲取JS同步來代替。只需在html > head
附加一個腳本標籤src="<script-location>"
,瀏覽器將同步執行此下載。
在這裏玩: 這是一種糟糕的用戶體驗阻塞,直到有東西下載。如果您使用優雅降級原則編寫代碼,則頁面應只激活可用的功能。你會讓另一個Web開發人員承擔這個責任嗎?不,我不會 - 我會關閉該標籤,並繼續:)
是否按照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>
我在我的代碼中很早就追加了JS。這會很早觸發JS的異步下載。這是一個非常大的JS文件,需要大量的時間來下載和我的網站上的許多功能使用這個JS文件。現在,在任何功能使用此JS文件之前,我需要確保JS可用。一種選擇是在檢查下使用這個JS的代碼來測試JS是否準備好,但是使用這個JS的代碼是分散的。我正在尋找一個解決方案,在使用JS之前,我可以檢查JS是否可用。如果JS不可用,我想阻止渲染以避免JS錯誤。 – user441258 2010-09-07 14:44:47
就算我能找到的是JS還沒有準備好,我怎麼能等待它被下載。如果我不阻止,我會得到JS錯誤。 – user441258 2010-09-07 09:47:07
我解決這個案子的方式是通過在頭部觸發異步下載,並在使用該JS之前,我嘗試使用標籤同步下載JS文件。如果第一個JS下載已經完成,則第二個下載從緩存中拾取Js,否則以下載方式下載。該JavaScript文件沒有自我執行的代碼,所以沒有對象被實例化兩次 – user441258 2010-09-07 09:48:38