Wit*_*iko 57 javascript dom userscripts google-chrome-extension dom-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);
Run Code Online (Sandbox Code Playgroud)
这在标准的javascript环境中和一个用户脚本中很好地工作,但是当事件被用户脚本触发并被捕获到它之外或在另一个用户脚本中时,data
属性是undefined
铬.我想我可以保存传递的数据sessionStorage
,但它远非无缝.还有其他优雅的解决方案,绅士和女士们?完美需要并且可以实现,我能感受到它.
Dig*_*ane 87
是的,你可以使用a MessageEvent
或a 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);
Run Code Online (Sandbox Code Playgroud)
传递具有更多细节的对象作为属性:
var event = new CustomEvent('build', { detail: { 'detail1': "something", detail2: "something else" }});
function eventHandler(e) {
log('detail1: ' + e.detail.detail1);
log('detail2: ' + e.detail.detail2);
}
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events
new CustomEvent
IE 不支持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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38491 次 |
最近记录: |