你最後else
-clause
else {document.addEventListener('load', c_onload, false);
的是什麼?這是毫無用處的,恕我直言。
下應該是一個跨瀏覽器的解決方案:爲addEventListener()
,然後attachEvent()
它首先檢查並回落到onload = ...
function chain(f1, f2) {
return typeof f1 !== 'function' ? f2 : function() {
var r1 = f1.apply(this, arguments),
r2 = f2.apply(this, arguments);
return typeof r1 === 'undefined' ? r2 : (r1 && r2);
};
}
function addOnloadListener(func) {
if(window.addEventListener)
window.addEventListener('load', func, false);
else if(window.attachEvent)
window.attachEvent('onload', func);
else window.onload = chain(window.onload, func);
}
此外,什麼kgiannakakis說
的原因是瀏覽器以不同的方式處理onLoad事件。
是不正確的:所有主流瀏覽器處理window.onload
以同樣的方式,即監聽功能獲取外部資源後執行 - 包括你的外部腳本 - 已加載。問題在於DOMContentLoaded
- 這是與doScroll()
,defer
,onreadystatechange
和任何其他人已煮熟的黑客來玩的地方。
根據您的目標受衆,您可能希望刪除後備代碼或者甚至獨佔使用它。我的投票將放棄它。
我知道這是一個非常老的線程,但我遇到了類似的問題,這裏的用戶幫助我解決了這個問題,而不需要任何第三方庫,即JQuery。 這是我的文章: http:// stackoverflow。com/questions/17401571/external-js-with-onload-event – 2013-07-01 12:25:38