javascript - 从外部js文件加载

标签 javascript onload

我正在编写一个 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()deferonreadystatechange 以及其他人进行黑客攻击的地方煮好了过来玩。


根据您的目标受众,您可能想要删除后备代码,甚至只使用它。我投票赞成放弃它。

关于javascript - 从外部js文件加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552524/

相关文章:

Javascript 从 dat.GUI 获取值

javascript - 准备好后从 Javascript 调用 Silverlight 方法

jquery - jQuery document read() 函数可能需要很长时间才能执行

javascript - 你如何在 jQuery 中使用 $ ('document' ).ready(function()) ?

html - 如何让 css 属性运行 onload?

javascript - 将属性名称隐式传递给对象方法的正确方法是什么?

javascript - Rails javascript 已包含但未在 heroku 上执行

javascript - 如何使用 Nodejs 对远程 Mongodb 进行 CRUD 操作

javascript - 我可以使用 Javascript 或 jQuery 检查图像是否已经加载过吗?

javascript - ajax.done 函数不起作用