Se si desidera veramente eseguire questa operazione, è possibile ignorare lo addEventListener
per tenere traccia degli eventi registrati e attivati.
var myEventManager = (function() {
var old = EventTarget.prototype.addEventListener,
listeners = [],
events = [];
EventTarget.prototype.addEventListener = function(type, listener) {
function new_listener(listener) {
return function(e) {
events.push(e); // remember event
return listener.call(this, e); // call original listener
};
}
listeners.push([type, listener]); // remember call
return old.call(this, type, new_listener(listener)); // call original
};
return {
get_events: function() { return events; },
get_listeners: function() {return listeners; }
};
}());
Tuttavia, non vi sono ragioni innumerevoli, non per fare questo, non ultimo il fatto che si eseguire rapidamente la memoria durante la registrazione migliaia di eventi come movimenti del mouse. Ciò inoltre non catturerà i listener di eventi impostati in modi come elt.onclick
. Né naturalmente catturerà gli ascoltatori impostati tramite la vecchia API IE attachEvent
. La cosa più importante, non ti aiuterà con gli eventi generati e ascoltati internamente, come un clic del mouse su una casella di controllo. (Una soluzione completa richiederebbe anche la manipolazione removeEventListener
.)
Potete anche ignorare createEvent
e dispatch
in modo simile, ma ancora una volta, che cattura solo gli eventi che vengono esplicitamente creati o spediti nel codice JS.
Se vuoi davvero fare ciò che sembri voler, suppongo che devi biforcarti Chrome.
fonte
2014-09-06 04:01:48
Quindi, prima domanda: perché? È meraviglioso che tu voglia farlo, ma è anche molto strano. –
Qualunque sia il problema che richiede questo, sono probabilmente un'alternativa migliore. Puoi gestire facilmente eventi sintetici e anche elementi creati dinamicamente (ci sono modi per rilevare ogni volta che viene creato un elemento) – Markasoftware
Questo suona molto bene. non ascoltare gli altri che ti stanno mettendo giù. –