在 Chrome 扩展程序中创建自定义事件的最惯用方式
Most idiomatic way of creating custom events in Chrome extensions
创建与DOM无关的自定义事件(使用经典chrome.Event
界面)并手动存储并触发它的最惯用方法是什么?
我的程序中有一个对象obj
,我想在其上创建一些事件对象,例如 obj.event1
和 obj.event2
,以便:
obj.event1.addListener(callback);
obj.event2.removeListener(callback);
...
是有效的调用。
我知道自己实现它相当容易,但我想知道是否有更好的方法。谢谢。
个人研究:
- DOM 事件:为
document
对象创建或从对象创建 -
chrome.events
:显示界面而不说明如何创建自定义事件 - Chrome 事件:它确实显示了如何向现有事件添加规则,但没有介绍如何创建自己的自定义事件。
chrome.Event
不能用于自定义事件。
要触发没有库的自定义事件,可以按如下方式使用标准 DOM 事件:
var listener = function(evt) {
console.log(evt.detail);
};
var target = document.createElement('a'); // Anything that implements EventTarget
target.addEventListener('myEvent', listener);
target.dispatchEvent(new CustomEvent('myEvent', {
detail: 'test',
}));
如您所见,无需在document
上注册所有事件,很可能使用任何实现EventTarget
接口的对象。
您可以使用消息传递。即使您尝试从扩展的一部分(例如弹出窗口)触发事件以在另一部分(例如背景页面)中处理,这也将起作用:
无论要接收消息的哪个位置,都要注册一个事件处理程序:
chrome.runtime.onMessage.addListener(message => {
if (!(event in message)) {
return;
}
if (message.event == "sayHello") {
console.log("Hello!");
}
});
然后,可以从扩展的任何其他部分触发处理程序:
chrome.runtime.sendMessage({event: "sayHello"});
相关文章:
- 什么'是在HTML5画布中创建关键事件的最佳方式
- 在Nodejs中堆叠异步回调事件的最佳方式
- 在 Chrome 扩展程序中创建自定义事件的最惯用方式
- 当以编程方式更改输入值时,不会执行更改时事件
- 如何以 Angular2 方式处理 ajaxStart 和 ajaxStop 事件
- 在带有 标记的树节点上以编程方式触发单击事件
- 如何使用cURL或其他方式在点击时执行事件
- 通过它查询谷歌地图上已经存在的标记's的lat和long,并以编程方式在其上触发一个单击事件
- 通知全局事件组件的最佳方式
- 以较短的方式使用事件
- 正在删除事件侦听器(DOM级别0方式)
- onChange事件在以编程方式加载后未正确触发
- 处理多次单击事件的最佳方式
- 以编程方式模糊 EXTJS 3.2.1 中的组合框控件不会触发“模糊”事件
- 将键盘快捷方式关联到鼠标事件的方法
- 以编程方式在聚合物输入上触发 onchange 事件
- 以编程方式触发 Coldfusion 中的事件
- 运行多事件功能的更简洁的方式
- 有没有办法确定 JS 事件是以编程方式还是通过实际交互触发的
- 反转对象与其他对象的事件耦合方式