你的最后一个 else
子句是什么?
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
以及其他某些人汇编的东西一起玩耍的地方。
根据您的目标受众,您可以选择放弃备选代码甚至仅使用它。我的投票是放弃它。