2012-06-07 28 views
13

Todavía no puedo creer que esto no sea posible, pero ¿hay alguna manera de recorrer el dominio y ver todos los manejadores de eventos conectados usando 'addEventListener'? This post y muchos otros dicen que no.Cómo encontrar detectores de eventos en un nodo DOM usando JavaScript

Si ese es el caso, entonces, ¿cómo lo muestran las aplicaciones como el inspector de Chrome o Firebug, que es lo que hacen? Supongo que probablemente aumenten los métodos del dom de alguna manera para que puedan rastrear lo que está vinculado.

+0

¿Dónde ves Chrome o Firebug mostrar oyentes de eventos? –

+0

Sí, ¡me encantaría saber dónde los ves también! He descargado plugins para Firebug que los muestran, pero probablemente tengas razón de que rastrean de alguna manera a cualquier oyente de eventos cuando están vinculados. – Ian

+1

En el inspector web de Chrome haz clic en la pestaña 'elementos' en la parte superior. es el más alejado de la izquierda. Seleccione un elemento en el dom y luego en el lado derecho hay una lista de información sobre el elemento que ha seleccionado, como Estilos, Propiedades, etc. El último en la lista es Escuchas de eventos y le brinda toda la información que necesita. Pero solo puede ver la información de cada elemento seleccionado, no el DOM completo. Hense yo haciendo la pregunta :) – screenm0nkey

Respuesta

25

consola de Chrome tiene un método que puede ayudar a comprobar si un nodo DOM tiene cualquier detector de eventos registrados, por ejemplo, para comprobar detectores de eventos asociados el uso nodo de documento:

https://developers.google.com/chrome-developer-tools/docs/commandline-api#geteventlistenersobject

getEventListeners(document); 

Se podría recursiva iterar sobre todos los nodos DOM y encontrar todos los controladores de eventos adjuntos si es necesario.

+2

getEventListeners (myDomElement) funciona en la consola de herramientas de desarrollador de Chromium v.25, pero en el código real arroja un error. –

+0

@Robinlikethebird sí, 'getEventListeners' es un método que proporciona la consola chrome devtools, estoy buscando un método que pueda encontrar eventos vinculados a dom en tiempo de ejecución. por ahora, solo encuentro el método jquery '$ .data (element, 'events')'. Estoy buscando una forma simple de javascript o DOM. – novaline

0

En la consola v53 Chrome me trataron:

getEventListeners (documento);

que devuelve:

__proto__: Objeto

y sub elementos, no lo que yo estoy buscando.

así que he intentado:

getEventListeners (ventana);

que devuelve

Object {beforeunload: Matriz [1], la carga: Matriz [1]}

Eso es lo que estoy buscando. Así que creo que el enfoque correcto es el Robin como forma de pájaro:

getEventListeners (myDomElement):

donde myDomElement es el objetivo objeto consiguió con formas estándar como getElemenById etc ..

0

use la siguiente función para recuperar el json de los eventos registrados;

getEventListeners (node_name); donde node_name puede ser un nombre de elemento o su id.

Cuestiones relacionadas