How to listen to custom events on all windows, bubbling issue?

前端 未结 1 1285
生来不讨喜
生来不讨喜 2020-12-21 12:39

I\'m trying to listen to custom event \'peakAhBoo\' so I add the event listener to gBrowser and if no gBrowser is present then I add it to aD

相关标签:
1条回答
  • 2020-12-21 13:14

    ok, now i see what you mean, but according to MDN you need to use this:

    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
    

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

    I tested it and it works!

    web page:

    <!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>
    

    and in privileged code:

    function respondToCustomEvent_peakAhBoo(e){
        console.log('g: '+e.target);
    }
    
    gBrowser.addEventListener("peakAhBoo", respondToCustomEvent_peakAhBoo, false, true);
    
    0 讨论(0)
提交回复
热议问题