我正在编写一个 js 脚本,人们可以通过将一行代码添加到 HTML 正文部分的 header 或末尾来将其添加到他们的网站。
我的问题是如何在外部 js 文件上执行 onload。下面的代码可以工作吗?它不可能在文档加载之后运行并错过 onload 事件吗?
function c_onload () { alert ('onload'); }
if (window.attachEvent) {window.attachEvent('onload', c_onload);}
else if (window.addEventListener) {window.addEventListener('load', c_onload, false);}
else {document.addEventListener('load', c_onload, false);}
(我无法使用 Jquery 或任何其他库)
最佳答案
你的最后一个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 所说的
The reason is that browsers handle the onLoad event differently.
事实并非如此:所有主流浏览器都以相同的方式处理 window.onload
,即监听器函数在外部资源(包括您的外部脚本)被执行后执行。已加载。问题在于 DOMContentLoaded
- 这就是使用 doScroll()
、defer
、onreadystatechange
以及其他人进行黑客攻击的地方煮好了过来玩。
根据您的目标受众,您可能想要删除后备代码,甚至只使用它。我投票赞成放弃它。
关于javascript - 从外部js文件加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552524/