initCustomEvent方法的传递数据不再起作用

时间:2014-09-13 09:27:42

标签: javascript firefox firefox-addon

我写了一个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中我是否有可能无法再传递函数,或者我应该采取更新的方法来解决我的问题?

2 个答案:

答案 0 :(得分:1)

您可能必须使用__exposedProps__

var detail = {
  name: "activate",
  method: function(){},
  __exposedProps__: {method: "r"}
};

毋庸置疑,除非您完全确定自己知道自己在做什么,否则这会带来安全隐患。

答案 1 :(得分:0)

你确定以前的工作有用吗?

您需要将addEventListener的第4个参数设置为true。参数称为wantsUntrusted

MDN :: addEventListener

另请参阅此主题: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);