在Greasemonkey脚本中扩展EventTarget类时,自定义事件addEventListener不起作用

问题描述

此脚本在粘贴到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-这对我有用,尽管我还没有弄清楚原因。

脚本中的EventTargetwindow.EventTarget似乎是不同的功能。 (您可以在脚本中的console.log(EventTarget == window.EventTarget)行中轻松地进行验证)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...