динамически добавлять прослушиватели событий - PullRequest
0 голосов
/ 25 октября 2009

У меня есть веб-сайт с сотнями HTML-страниц, которые уже развернуты. Теперь я хочу добавить слушатели событий в тело, такие как onload и onunload на всех html-страницах. Я не хочу вручную изменять каждый из них, поэтому я думаю, смогу ли я динамически добавить этих слушателей. Моя идея состоит в том, чтобы написать код JavaScript, который находит узел тела DOM и добавляет слушателей к этому узлу. Было бы возможно? (это не должно быть кросс-браузерное решение. код будет работать на Firefox.)

Спасибо! Пол

Ответы [ 6 ]

3 голосов
/ 25 октября 2009

Если вы хотите добавить JavaScript, вам в конечном итоге потребуется изменить сайт так или иначе.

Возможно, вы будете выполнять глобальный поиск, заменять и искать:

</head>

И измените его на

<script type="text/javascript" src="/global.js"></script>
</head>

Затем в корне вашего сайта создайте файл с именем global.js и поместите его в него:

window.onload = function() {
   // onload code here
}

window.onunload = function() {
   // onunload code here
}

Какие вещи вы пытаетесь сделать? Советуем использовать jQuery или другую библиотеку, если вы добавляете много обработчиков событий, но если вам просто нужно добавить несколько блоков JS, возможно, библиотека излишня.

2 голосов
/ 25 октября 2009

Да, просто ... но как ты собираешься вставить туда javascript? Если вы уже загружаете одну библиотеку javascript на всех страницах, которая позволяет вам подключить ваш метод, вы можете использовать

window.onload = function() {};

и

window.onunload = function() {};

.. но если у вас есть возможность, я бы серьезно предложил использовать такую ​​библиотеку, как jQuery, которая скрывает от вас всю эту грязь.


Павел попросил разъяснений. Вот пример кода:

var hi = function() {
  alert('hi there.');
};

var bye = function() {
  alert('bye!');
};

if(window.addEventListener) {
  window.addEventListener('load', hi, false);
  window.addEventListener('unload', bye, false);
} else if(window.attachEvent) {
  window.attachEvent('load', hi);
  window.attachEvent('unload', bye);
}
0 голосов
/ 25 октября 2009

Поскольку это необходимо только для работы в Firefox, событие DOMContentLoaded (что означает, что HTML загружен, не включая изображения) должно прослушиваться

document.addEventListener("DOMContentLoaded", function () {
    // your code here; document.body is available
}, false);
0 голосов
/ 25 октября 2009

Обычный способ добавить событие в Firefox - это obj.addEventListener (type, fn, false). Так что единственное, что нужно сделать, это:

window.addEventListener('load', yourFunction, false );

Нет причин использовать jquery для этого.

0 голосов
/ 25 октября 2009

Ну, вы могли бы сделать одну из этих четырех вещей:

  • Используйте некоторый язык сценариев, такой как PHP, Python или ASP.Net, чтобы создать веб-интерфейс для этих страниц, который добавляет необходимый код
  • Используйте такие инструменты, как grep и sed, чтобы заменить все
  • Загрузка упомянутых страниц во фрейме из центральной «Домашней страницы» и использование DOM Manipulation для добавления указанных слушателей событий (хотя я считаю, что это будет невозможно для body.onLoad)
  • Если все страницы уже загружены некоторый javascript, просто бросьте туда даже своего слушателя.
0 голосов
/ 25 октября 2009

Для этого есть 2 решения:

  1. Вы можете использовать событие готовности jQuery
  2. Или вы можете использовать window.onload
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...