我写了一个firefox扩展,对于特权页面和非特权页面之间的交互数据,我使用了这个剪切代码
//Listen for the event
window.addEventListener("MyEvent", function(evt) {
console.log(evt.detail);
}, false);
//Dispatch an event
var evt = document.createEvent("CustomEvent");
evt.initCustomEvent("MyEvent", true, true, {
name : 'activate',
method : function() {
//...
}
});
window.dispatchEvent(evt);
并且在我将FireFox更新到版本32.0.1之后一切顺利,此时我的FireFox不起作用,我尝试找到错误并发现我传递给MyEvent的方法始终为null。为什么呢?
在新版本的FireFox中我是否有可能无法再传递函数,或者我应该采取更新的方法来解决我的问题?
答案 0 :(得分:1)
您可能必须使用__exposedProps__。
像
var detail = {
name: "activate",
method: function(){},
__exposedProps__: {method: "r"}
};
毋庸置疑,除非您完全确定自己知道自己在做什么,否则这会带来安全隐患。
答案 1 :(得分:0)
你确定以前的工作有用吗?
您需要将addEventListener
的第4个参数设置为true
。参数称为wantsUntrusted
。
另请参阅此主题:How to listen to custom events on all windows, bubbling issue?
所以试试这个:
//Listen for the event
window.addEventListener("MyEvent", function(evt) {
console.log(evt.detail);
}, false, true);
//Dispatch an event
var evt = document.createEvent("CustomEvent");
evt.initCustomEvent("MyEvent", true, true, {
name : 'activate',
method : function() {
//...
}
});
window.dispatchEvent(evt);