是否有任何方法可以通过自定义事件传递额外的数据
Is there any way of passing additional data via custom events?
我需要在两个自主用户脚本之间传递数据——理想情况下不需要接触unsafeWindow
对象——我认为使用自定义事件是可行的。我想到了这样的东西(为了这个例子的目的,让我们忽略MSIE模型):
addEventListener("customEvent", function(e) {
alert(e.data);
});
var custom = document.createEvent("HTMLEvents");
custom.initEvent("customEvent", true, true);
custom.data = "Some data...";
dispatchEvent(custom);
这在标准Javascript环境中和一个用户脚本中都能很好地工作,但当事件由用户脚本触发并在其外部或另一用户脚本内部捕获时,Chromium中的data
属性为undefined
。我想我可以将传递的数据保存在sessionStorage
中,但这远非无缝的。还有其他优雅的解决方案吗?完美需要并且可以实现,我能感觉到。
是的,您可以使用MessageEvent
或CustomEvent
。
示例用法:
//Listen for the event
window.addEventListener("MyEventType", function(evt) {
alert(evt.detail);
}, false);
//Dispatch an event
var evt = new CustomEvent("MyEventType", {detail: "Any Object Here"});
window.dispatchEvent(evt);
将更多详细信息作为属性传递对象:
var event = new CustomEvent('build', { detail: { 'detail1': "something", detail2: "something else" }});
function eventHandler(e) {
log('detail1: ' + e.detail.detail1);
log('detail2: ' + e.detail.detail2);
}
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
new CustomEvent
https://caniuse.com/#search=CustomEvent
这里有一个版本,它也适用于IE9+:
//Listen for the event
window.addEventListener("MyEventType", function(evt) {
alert(evt.detail.test); //alerts "Any Object Here"
}, false);
//Dispatch an event
var evt = document.createEvent('CustomEvent');
evt.initCustomEvent('MyEventType', false, false, { test: "Any Object Here" });
window.dispatchEvent(evt);
相关文章:
- 将单击事件添加到数据表
- node.js请求数据事件未在CORS ajax调用中触发
- node exec()未触发所有数据事件
- Node.js输入数据事件停止
- 如何从节点.js请求对象读取数据事件(块)
- IE8:触发“加载元数据”事件
- Firefox 加载元数据事件
- 节点 ssh2 为一个简单的 ls 命令发送多个数据事件
- 未定义的 JWPlayer 元数据事件
- 数据事件未触发节点.js
- 具有多个“数据”事件处理程序和竞争条件的 NodeJS 流
- Nodejs正在侦听来自http.get()的数据事件的响应流
- process.stdin流的可读事件和数据事件有什么区别
- <视频>和加载的元数据事件
- 加载数据事件永远不会触发
- 用于数据事件的JavaScript选择器
- swf加载元数据事件
- 变量未在请求 JS 的数据事件中更新
- Node.js请求数据事件未触发.我做错了什么?
- 在数据事件中访问c3js中的数据值