Можно ли отслеживать прослушиватели событий в элементе HTML, чтобы знать, когда один из них удален? - PullRequest
0 голосов
/ 04 апреля 2019

У меня проблема на странице, при которой событие не запускается при определенных обстоятельствах.Это не мой код, и я пытаюсь отладить минимизированный и скрытый код JavaScript, и я схожу с ума.

При ответе на комментарий на нашем веб-сайте, если текст ответа пуст в этом событии (событие аналитики, чтобы зарегистрировать, что пользователь нажал кнопку ответа), запущено.Если текст есть, событие не запускается.

Элемент представляет собой тег <span>, но прослушиватель событий фактически подключен к тегу <body>.Моя текущая теория заключается в том, что некоторый код, который выполняется, когда в ответе содержится фактически текст, удаляет этот прослушиватель событий и, следовательно, он не запускается.

Итак, есть ли способ отслеживания прослушивателей событий в <body>чтобы знать, когда (и где в коде) удаляется этот прослушиватель событий?

Обновление Мы нашли проблему.Сторонняя библиотека, которую мы используем для комментариев, удаляет родительский элемент кнопки, и это делает невозможным распространение события на тело.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Если вы можете запустить код сценария до удаления обработчика событий, вы можете заменить removeEventListener на document.body своей собственной функцией:

const original = document.body.removeEventListener;
document.body.removeEventListener = function(...args) {
  console.log("Removed");
  return original.apply(this, args);
};

function handler() {
  console.log("Clicked");
}
document.body.addEventListener("click", handler);
document.body.removeEventListener("click", handler);

(Чтобы покрыть свои базы, вы также можете конвертировать onclick (или что-то еще используется) в аксессор, чтобы вы могли захватить его, если код делает document.body.onclick = null;)

Существуют и другие способы добавления и удаления обработчика, но, надеюсь, любая используемая вами библиотека использует стандарт.


Примечание: для подтверждения вашей теории об удалении обработчикаВы можете проверить обработчики элемента в devtools в Chrome: щелкните правой кнопкой мыши на странице и выберите «Проверить элемент», перейдите на body и посмотрите на вкладку «Прослушиватели событий».

0 голосов
/ 04 апреля 2019

Я думаю, вы также можете использовать инструменты разработчиков Google, которые вы можете открыть с помощью кнопки в правом верхнем углу окна.В разделе исходного кода вы можете увидеть все прослушиватели событий

...