He notado que mi AdBlocker elimina los detectores de eventos de click en JavaScript. Me gustaría eliminar los detectores de eventos de click en la página y no estoy seguro de cómo hacerlo.
Leí que, en general , no puedo eliminar los detectores de eventos a los que no tengo una referencia de JavaScript , pero me pregunto si hay alguna forma de eliminar los detectores de eventos dado que este es mi navegador, ya que AdBlocker logra hacerlo de alguna manera.
¿Cómo puedo eliminar los detectores de eventos de click de la consola de JavaScript mediante programación?
Su AdBlocker hace trampa al conectarse al depurador del navegador que tiene una página de permisos elevados que JavaScript no tiene.
Esto se debe a que (por diseño) no hay forma de obtener detectores de eventos de página existentes y eliminarlos.
Puede interceptar eventos antes de la página (lo más probable) agregando un evento en "modo de captura" y evitando que el evento se propague a la página, pero la página simplemente tiene mejores ganchos que usted, ya que las herramientas de desarrollo solo le permiten ejecutar código después de la página. corre :
document.documentElement.addEventListener('click', (e) => { e.preventDefault(); // stop the click // still fire the event on the video player so you can click it document.querySelector('video').dispatchEvent(e); }, { useCapture: true });Esto se debe a que la página simplemente puede adjuntar el evento (en captura) antes que usted y, dado que no hay forma de "anteponer" a un oyente, pueden "ganar" esta batalla.
¡Afortunadamente, los devtools también tienen superpoderes! Puede llamar a métodos de depuración y proporciona utilidades que JavaScript de página normal no tiene:
// This works in Chrome, Firefox, Safari const listeners = getEventListeners(document); // Also get the listeners for document.body and so on until you find it for(const { listener, useCapture} of listeners.click) { // remove the listener document.removeEventListener(listener, { useCapture }); }Lo cual es un gancho mejor que el que tiene la página y siempre debería funcionar.
Las extensiones hacen esto directamente "hablando del depurador" y usando la interfaz chrome.debugger para llamar a DOMDebugger.getEventListeners