Прежде чем я углублюсь в детали этой проблемы, я хотел бы прояснить ситуацию. Наша компания веб-аналитики работает консультантом для крупных сайтов, и (кроме добавления одного тега SCRIPT) мы не можем контролировать сами страницы.
Наш существующий скрипт устанавливает обработчики, используя «старый» способ (причудливая версия element.onclick = blah; он также выполняет оригинальный обработчик), который полностью не знает о обработчиках «new» (addEventListener или attachEvent) на странице. Мы хотели бы исправить это, чтобы наш скрипт мог запускаться на большем количестве сайтов, не требуя столько специальной разработки.
Первоначально предполагалось, что наш собственный скрипт использует addEventListener / attachEvent, но это представляет проблему: на сайте клиента устанавливается обработчик, использующий «старый» способ, он уничтожит обработчик, который мы установили «новым». путь. Быстрое и грязное тестирование показывает, что это происходит как в IE7, так и в FF3, хотя я не тестировал весь диапазон браузеров. Существует также риск того, что если мы используем «новый» способ после того, как обработчики событий страницы уже установлены, мы можем стереть их обработчики.
Итак, мой вопрос: какую безопасную технику я могу использовать для добавления обработчика событий в Javascript с помощью addEventListener / attachEvent, который работает независимо от того, как установлены другие обработчики событий на странице?
Пожалуйста, помните: у нас нет возможности изменить сайт, на котором установлен наш скрипт. (Я должен подчеркнуть, что, поскольку ответ по умолчанию на подобные вопросы всегда таков: «просто переписать страницу, чтобы сделать все одинаково».)