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

Function within exported array in Firefox Add-on SDK not available

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

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,因此当您发出消息时它们不会被编码。

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