динамически добавляйте прослушиватели событий

StackOverflow https://stackoverflow.com/questions/1620092

  •  06-07-2019
  •  | 
  •  

Вопрос

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

Спасибо!Пол

Это было полезно?

Решение

Если вы хотите добавить 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, возможно, библиотека излишня.

Другие советы

Да, легко..но как вы собираетесь вставить туда 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);
}

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

  1. Вы можете использовать готовое событие jQuery
  2. Или вы можете использовать window.onload

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

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

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

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

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

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

document.addEventListener("DOMContentLoaded", function () {
    // your code here; document.body is available
}, false);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top