![](/img/trans.png)
[英]addEventListener and setInterval fail silently in a Greasemonkey script
[英]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
,雖然我還沒有弄清楚原因。
腳本中的EventTarget
和window.EventTarget
似乎是不同的功能。 (您可以使用腳本中的console.log(EventTarget == window.EventTarget)
行輕松驗證這一點)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.