javascript - Firefox Add-on SDK 中导出数组中的函数不可用

标签 javascript firefox firefox-addon firefox-addon-sdk

我有一个模块,它导出一个包含函数参数的对象的数组:

var myArray = [
  {
    id: "firstObject",
    func: function() {
      console.log("Hi from function!");
    }
  }
];

exports myArray = myArray;

此模块包含在另一个脚本中,该脚本向客户端脚本发出事件并将数组作为参数传递:

var {myArray} = require("./array.js");

for (var i = 0; i < myArray.length; i++) {
  self.port.emit("someEvent", myArray[i]);
}

在客户端,我现在可以访问对象的 id,但不能访问 func 参数所保存的函数。实际上,func 参数根本没有在客户端设置。

这是为什么呢?如何规避这一点?

最佳答案

docs about port.emit说:

The payload can be any value that is serializable to JSON.

functions are not JSON serializable ,因此当您发出消息时它们不会被编码。

为了避免这个问题,您必须将该逻辑从对象移动到插件的主脚本或内容脚本:这取决于您需要对该消息执行什么操作。

关于javascript - Firefox Add-on SDK 中导出数组中的函数不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34382000/

相关文章:

javascript - 随机化球体上的点并赋予它们 ID

javascript - 如何在 virtual-dom 中定义 svg 属性?

javascript - jquery密集的文本阴影和模糊的背景颜色

html - 浏览器窗口外的不透明度变为实心

google-chrome-extension - 如何将 Chrome 扩展程序移植到其他网络浏览器

javascript - Firefox 扩展 : how to fill an input text field

javascript - 将 CSRF 保护 header 添加到 wicket ajax 调用

css - Firefox 和 IE9+ 的剪辑路径替代方案

jquery - 没有滚动链接定位的当前导航位置

javascript - 火狐SDK : how to use emit for sidebar outside widget