w3schools eventos event create javascript-events firefox-addon listener event-bubbling custom-events

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

fuente: https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Interaction_between_privileged_and_non-privileged_pages

¡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);