此脚本在粘贴到 FireFox 下的开发人员控制台时有效,但在作为 Greasemonkey 脚本运行时无效,我不完全确定原因。没有关于“extends 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 中运行时,构造函数运行,它调度事件但不接收它。在控制台上,它完成了所有三件事。