javascript-events - eventos - dispatchevent javascript w3schools
¿Cómo escuchar eventos personalizados en todas las ventanas, problema de burbujeo? (1)
Estoy tratando de escuchar el evento personalizado ''peakAhBoo'' así que agrego el detector de eventos a gBrowser
y si no está presente gBrowser
entonces lo agrego a aDOMWindow
( aDOMWindow
).
Fragmento de código:
loadIntoWindow: function (aDOMWindow, aXULWindow) {
if (!aDOMWindow) {
return;
}
if (aDOMWindow.gBrowser) {
aDOMWindow.gBrowser.addEventListener(''peakAhBoo'', respondToCustomEvent_peakAhBoo, true);
} else {
aDOMWindow.addEventListener(''peakAhBoo'', respondToCustomEvent_peakAhBoo, true);
}
},
Código para enviar el evento:
var myEvent = new CustomEvent(''peakAhBoo'', {
''detail'': {
''hazcheeseburger'': true
}
});
var myEvent = window.document.createEvent(''CustomEvent'');
var myEventDetail = {hello:''world''};
myEvent.initCustomEvent(''peakAhBoo'', true, true, myEventDetail);
window.dispatchEvent(myEvent);
Sin embargo, si abro el bloc de notas y ejecuto este código de evento de creación / despacho desde el contenido del entorno, no está burbujeando hasta gBrowser
. Si lo ejecuto en el entorno del navegador, nunca llega a la ventana.
ok, ahora veo lo que quieres decir, pero de acuerdo con MDN necesitas usar esto:
document.addEventListener("MyExtensionEvent", function(e) { myExtension.myListener(e); }, false, true);
// The last value is a Mozilla-specific value to indicate untrusted content is allowed to trigger the event
¡Lo probé y funciona!
página web:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="main-content"><button onclick="trigger()">Trigger custom event</button></div>
<script type="text/javascript">
function trigger(){
var myEvent = new CustomEvent(''peakAhBoo'', {
''detail'': {
''hazcheeseburger'': true
}
});
var myEvent = window.document.createEvent(''CustomEvent'');
var myEventDetail = {hello:''world''};
myEvent.initCustomEvent(''peakAhBoo'', true, true, myEventDetail);
window.dispatchEvent(myEvent);
console.log(myEvent)
}
</script>
</body>
</html>
y en código privilegiado:
function respondToCustomEvent_peakAhBoo(e){
console.log(''g: ''+e.target);
}
gBrowser.addEventListener("peakAhBoo", respondToCustomEvent_peakAhBoo, false, true);