------------------
Hoy me encontraba trabajando en un código ofuscado/comprimido... en otras palabras: un código que no se entiende en absoluto y es larguisimo.
En una parte me di cuenta que tenia que ver todos los listeners (con su respectivos eventos y metodos) para poder disparar correctamente una funcion que la cual ni sabia el nombre... entonces me puse a buscar como se podria hacer por Internet, e incluso en stackoverflow decian que no era posible (al menos sin un framewok que llevara cuenas) pero despues de hecharle cabeza me sospeche que si era posible modificando el prototipo del los elementos html... asi que salio esto:
Cita:
Despues de insertar este pedaso de codigo antes que cualquier otro codigo puede inspeccionar todos los eventos de cualquier anchor (<a>) por que tienen una propiedad llamada lastListenerInfo que contiene todos los listeners que cada uno tiene asignado.function reportIn(e){
var a = this.lastListenerInfo[this.lastListenerInfo.length-1];
console.log(a)
}
HTMLAnchorElement.prototype.realAddEventListener = HTMLAnchorElement.prototype.addEventListener;
HTMLAnchorElement.prototype.addEventListener = function(a,b,c){
this.realAddEventListener(a,reportIn,c);
this.realAddEventListener(a,b,c);
if(!this.lastListenerInfo){ this.lastListenerInfo = new Array()};
this.lastListenerInfo.push({a : a, b : b , c : c});
};
;
var a = this.lastListenerInfo[this.lastListenerInfo.length-1];
console.log(a)
}
HTMLAnchorElement.prototype.realAddEventListener = HTMLAnchorElement.prototype.addEventListener;
HTMLAnchorElement.prototype.addEventListener = function(a,b,c){
this.realAddEventListener(a,reportIn,c);
this.realAddEventListener(a,b,c);
if(!this.lastListenerInfo){ this.lastListenerInfo = new Array()};
this.lastListenerInfo.push({a : a, b : b , c : c});
};
;
Igualmente en la función reportIn() se puede insertar cualquier código que se quiera ejecutar cuando alguno de los eventListeners es disparado.
Otra ventaja que se puede aprovechar es que hace posible borrar listeners con funciones anonimas.