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

时间:2015-06-13 12:13:41

标签: firefox model-view-controller google-chrome-extension firefox-addon marionette

我正在为Firefox制作自举扩展程序(实际上,尝试移植Chrome扩展程序)。 在Chrome中它是:

  • 后台页面保存backgroundApp,它是Marionette.Application的一个实例,其模块保存Backbone数据模型,并进行存储和同步。
  • 弹出页面包含popupApp,它是Marionette.Application的另一个实例,它的模块负责处理带有视图和路由器的UI。要获取数据,弹出窗口使用对通过backgroundApp
  • 访问的chrome.extension.getBackgroundPage()的引用

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

1 个答案:

答案 0 :(得分:1)

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

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

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

所以你可以让你的骨干/牵线木偶的东西在一个面板或一个不可见的页面中运行(背景页API的作用是什么?)但如果你想让它们彼此沟通,你将不得不将您的数据变成某种可串行的形状。

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