防止window.onload被覆盖

Prevent window.onload being overridden

本文关键字:覆盖 onload window 防止      更新时间:2023-09-26

如何克服被覆盖的事件处理程序?我有一个脚本说a.js

window.onload = function () {
   //Handler in a.js
}

另一个脚本说b.js

window.onload = function () {
   //Handler in b.js
}

其中,

a.js是我建立的一种第三方库

b.js是一个使用我的脚本的出版商[我不能在这里做任何更改]

b.js中的onload处理程序会覆盖a.js的处理程序吗?

如果是,如何防止这种情况发生?

在.js中构建一个包含所有事件处理程序的队列并在事件上取消它们是否有帮助?

但是,在加载b.js之前,a.js会提前知道事件的所有事件处理程序吗?

思考和参考会有所帮助。

您应该使用addEventListener()为同一事件提供不同的处理程序

window.addEventListener("load", yourfunction, false); 

在下层IE版本中使用element.addEventListenerwindow.attachEvent

样本addEvent方法:

function addEvent(node, type, listener) {
    if (node.addEventListener) {
        node.addEventListener(type, listener, false);
        return true;
    } else if (node.attachEvent) {
        node['e' + type + listener] = listener;
        node[type + listener] = function() {
            node['e' + type + listener](window.event);
        }
        node.attachEvent('on' + type, node[type + listener]);
        return true;
    }
    return false;
};

注意-大多数(如果不是全部的话)现代JavaScript库(如jQueryMooTools)都有自己的实现。我建议利用他们的API,因为它们抽象出不同的浏览器实现,并经过了彻底的测试

是的,第二条语句将覆盖第一条语句。因为您使用的是传统的注册模型,所以任何给定的事件和对象都只允许使用一个事件句柄。功能分配不是累积的。但你可以:

  window.onload = function () {handlerinb(); handlerina()}