瀏覽器的檔案載入其實是有非常糾結的兼容問題的。最近看到@lifesinger做了一個具體的總結。這裡比較麻煩的是IE6~8不區分載入成功或失敗,都走一個回呼。在網路上看了一個解決方案是,在載入檔案的最後置一個全域變數或改變標籤的屬性來區分,這樣成功與否就透過這個標誌位判斷。但顯然不太完美,還要改載入檔。
後來嘗試另一種思路,先創建一個vbscript,src置成一個JS文件,如這個文件加載正常,肯定會報錯否則不會有反應。這樣如果window.onerror捕捉到錯誤了,表示檔案有效,再正常載入。如果沒捕獲到,n秒後會觸發一個超時。
這部分程式碼:
if(ie && ie
vbs = doc.createElement('script');
vbs.language = 'vbscript';
vbs.src = file;
saveErrorHandle = win.onerror;
win.onerror = function() {
load();
win.onerror = saveErrorHandle;
return true;
};
setTimeout(function(){
ref.parentNode.insertBefore(vbs, ref);
}, 0);
} else {
load();
}