我試圖在腳本完全加載後執行某些操作。 (IE8)動態創建腳本:readyState永遠不會「完成」
腳本我用來測試:http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
和無效之一:http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.minaaaaaaaa.js
代碼...
var script = create the element and append to head...
// this works fine with FF/Chrome/...
script.onload = function() {alert('script loading complete');}
script.onerror = function() {alert('error loading script');}
// and for IE
script.onreadystatechange = function() {
// this will alert 1.loading 2.loaded
alert(this.readyState);
// this never works
if(this.readyState == 'complete') {alert('script loading complete');}
// this works with either a valid or INVALID url
else if(this.readyState == 'loaded') {alert('script loaded');}
};
在我的情況下, 「完整」 永不顯示,即使網址無效,「已加載」也會顯示。因此無法判斷腳本是否正確加載到UNDER IE中。
我做錯了什麼?我怎麼從來沒有得到完整的狀態?
UPDATE
OK,我只是看了一些文章,似乎readyState爲不檢測腳本加載的可靠方法。
那麼還有其他的方法嗎?沒有jQuery,但純Javascript。
我不確定你想要做什麼,但我建議尋找'jQuery#getScript'來獲得如何動態加載腳本的想法。最重要的是,使用AJAX模式可以讓您測試HTTP錯誤,因爲您似乎想到了這一點。這不能 - afaik - 可以使用'script'標籤上的DOM'Events'完成。 – FK82
感謝您的輸入,FK82。我只是想100%確定該腳本已加載。正如我所說的,在FF/Chrome中,onload和onerror完美工作。但在IE下,即使腳本url無效(或可能超時),readyState仍會返回加載。我想使用純Javascript的原因是因爲我想確保jQuery從CDN首先正確加載,然後使用jQuery來做東西。是的,我也發現這應該採用AJAX的方式。 (還沒有嘗試壽) – pepsi600
請看看我的答案。您將能夠使用AJAX/XHR('XMLHttpRequest')模式捕獲各種HTTP錯誤。另外,我相信這在跨瀏覽器兼容性方面會更穩定。 – FK82