簡體   English   中英

在 Greasemonkey 腳本中擴展 EventTarget 類時,自定義事件 addEventListener 不起作用

[英]Custom event addEventListener not working when extending EventTarget class in Greasemonkey script

此腳本在 FireFox 下的開發人員控制台中粘貼時有效,但在作為 Greasemonkey 腳本運行時無效,我不完全確定原因。 沒有關於“擴展 EventTarget”和“dispatchEvent”的文檔或很多討論。 但似乎我無法收聽自定義事件。 知道為什么或如何解決它嗎?

// ==UserScript==
// @name     EventTarget test
// @version  1
// @grant    none
// ==/UserScript==

class evtest extends EventTarget {
    constructor() {
        super();

        console.warn( "CONSTRUCTOR OK" ); // works in GM

        var event = new CustomEvent("test_event", {
            detail: { value: 3.4, lever: false }
        });

        setTimeout(() => {
            console.warn( "DISPATCHING EVENT" ); // works in GM
            this.dispatchEvent( event );
        }, 1000);
    }
}

var test = new evtest();

test.addEventListener("test_event", (e) => {
    console.warn( "RECEIVED EVENT", e.detail ); // does NOT work in GM
});

在 GM 4.3 中運行時,構造函數運行,它調度事件但不接收它。 在控制台上,它完成所有三件事。

Greasemonkey 在沙箱內運行,我想這就是您無法捕獲事件的原因。

嘗試擴展window.EventTarget - 這對我window.EventTarget ,雖然我還沒有弄清楚原因。

腳本中的EventTargetwindow.EventTarget似乎是不同的功能。 (您可以使用腳本中的console.log(EventTarget == window.EventTarget)行輕松驗證這一點)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM