javascript - 在 Greasemonkey 脚本中扩展 EventTarget 类时自定义事件 addEventListener 不起作用
问题描述
此脚本在粘贴到 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 中运行时,构造函数运行,它调度事件但不接收它。在控制台上,它完成了所有三件事。
解决方案
Greasemonkey 在沙箱内运行,我想这就是您无法捕获事件的原因。
尝试扩展window.EventTarget
- 这对我有用,虽然我还没有弄清楚为什么。
脚本中似乎EventTarget
有不同的功能。(您可以使用脚本中的一行轻松验证这一点)。window.EventTarget
console.log(EventTarget == window.EventTarget)
推荐阅读
- javascript - 更新一个对象,如果不存在则创建它
- php - $this->request->getPost('email') 在执行 axios POST 请求时没有给出任何值
- python - 如何操作字典的键和值
- javascript - (Discord.JS) 机器人在用户加入时不发送 DM 消息
- css - 在应用服务 ASP Net Core Razor 页面标识服务器 4 中部署后未加载 CSS
- vue.js - 唯一标识 vuejs 中单个 v-card 的按钮单击
- python - 类函数装饰器的正确类型
- java - 如何在java中使用多线程,以便它们在游戏中轮流
- laravel - 无法在 vue.js 中显示图像
- python - 提供“内置函数或方法”的 Python sqlite 查询