浏覽器的文件加載實際上是有非常糾結的兼容問題的。最近看到@lifesinger做了一個具體的總結。這裡比較麻煩的是IE6~8不區分加載成功或失敗,都走一個回調。在網上看了一種解決方案是,在加載文件的最後置一個全局變量或改變標簽的屬性來區分,這樣成功與否就通過這個標志位判斷。但顯然不太完美,還要改加載文件。
後來嘗試另一種思路,先創建一個vbscript,src置成一個JS文件,如這個文件加載正常,肯定會報錯否則不會有反應。這樣如果window.onerror捕獲到錯誤了,說明文件有效,再正常加載。如果沒捕獲到,n秒後會觸發一個超時。
這部分代碼:
代碼如下:
if(ie && ie < 9) {
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();
}