你最后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