防止window.onload被覆盖javascript

Tam*_*mil 17 javascript javascript-events

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

window.onload = function () {
   //Handler in a.js
}
Run Code Online (Sandbox Code Playgroud)

另一个剧本说b.js

window.onload = function () {
   //Handler in b.js
}
Run Code Online (Sandbox Code Playgroud)

哪里,

a.js是我建立的第三方图书馆

b.js是使用我的脚本的发布者[我不能在这里做任何更改]

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

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

是否会在a.js中构建所有事件处理程序的队列,并在事件帮助中将它们解除?

但是a.js是否会知道事件的所有事件处理程序,直到事先b.js被加载?

思考和参考将有所帮助

Nic*_*tti 20

你应该使用addEventListener()来为同一个事件提供各种处理程序

window.addEventListener("load", yourfunction, false); 
Run Code Online (Sandbox Code Playgroud)


xan*_*ded 8

使用element.addEventListenerwindow.attachEvent在低级IE版本中.

样品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;
};
Run Code Online (Sandbox Code Playgroud)

-大多数情况下,如果不是全部,现代JavaScript库一样jQuery,并MooTools有自己的实现.我建议利用他们的API - 因为他们抽象出不同的浏览器实现并且已经过全面测试.