你的最后一个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
根据您的目标受众,您可能想要删除后备代码,甚至专门使用它。我的投票赞成放弃它。