从 Firefox 插件中的内容和页面脚本访问主插件脚本中定义的对象

Accessing objects defined in main addon script from content and page scripts in Firefox addons

我正在为 Firefox 制作引导扩展(实际上,试图移植工作 Chrome 扩展)。 在 Chrome 中是:

现在我很难找到如何将模型传递给 Firefox 中的弹出面板代码,到目前为止我遇到的所有消息传递机制都只采用 JSONable 数据。

如果您尝试在 firefox 插件中使用 javascript 框架,您将不会感到高兴。至少如果你在单个 window 对象的范围之外使用它们。

脚本 运行 存在多个不同的、相当孤立的环境。如果我们考虑 e10s(多进程 firefox),那么插件主代码将在父进程中 运行,而与页面内容交互的任何内容将在内容进程中 运行。

消息传递是在这些环境之间进行交互的唯一方式,虽然可以为复杂对象设置远程代理,但会导致相当大的性能损失,因此不鼓励使用它们。

因此您可以将 backbone/marionette 内容 运行 放在面板或不可见页面中(这就是背景页面 API 的作用?)但是如果您想要它们相互通信,您必须将数据转化为某种可序列化的形状。

根据您的需要,为您的模型实现复制构造函数可能就足够了。 IE。构造函数可以选择使用普通 javascript 对象(值袋)并从中重新创建正确类型的模型。这就要求对象可以根据其可枚举的自身属性进行完全重构。