Запретить window.onload переопределять javascript

Как преодолеть переопределение обработчиков событий? У меня есть script say a.js

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

Другой script скажем b.js

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

где <

a.js - это своего рода библиотека сторонних разработчиков, созданная мной

b.js - издатель, который использует мой script [я не могу здесь делать никаких изменений]

Будет ли обработчик onload в b.js переопределить обработчик a.js?

Если да, как предотвратить это?

Будет ли создавать очередь всех обработчиков событий в a.js и декаковать их при помощи справки?

Но будет ли a.js знать все обработчики событий для события до начала загрузки b.js?

Мысли и ссылки помогли бы

Ответы

Ответ 1

Используйте element.addEventListener или window.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;
};

Примечание. Большинство, если не все, современных библиотек JavaScript, таких как jQuery и MooTools, имеют свои собственные реализации. Я рекомендую использовать их API, поскольку они абстрагируются от различных реализаций браузера и тщательно протестированы.

Ответ 2

вы должны использовать addEventListener(), чтобы иметь различные обработчики для одного и того же события

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

Ответ 3

Да, второй оператор будет переопределять первый. Поскольку вы используете традиционную модель регистрации, для любого заданного события и объекта разрешен только один дескриптор события. Назначение функции не является совокупным. Но вы можете:

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