1

我为Firefox启动引导扩展(实际上,尝试移植工作的Chrome扩展)。 在Chrome中是:从Firefox插件中的内容和页面脚本访问在主插件脚本中定义的对象

  • 背景网页持有backgroundApp这是Marionette.Application的实例及其模块保存数据的骨干机型,做存储和同步的东西。
  • Popup页面包含popupApp这是Marionette.Application的另一个实例,它的模块负责处理在UI中定义的视图和路由器。要获取数据,弹出使用的引用,通过chrome.extension.getBackgroundPage()访问。

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

+0

查看[tag:firefox-addon-sdk]标签,你会看到人们做了很多这样的事情,它是我认为的大部分SDK插件的基本前提。 – Noitidart

+0

@Noitidart,如果没有XPCOM(如果不是更多,需要花费数天才能理解和实现),似乎没有办法实现这一点,我正确吗? – stsloth

+0

完全没有,这是从contentScript传递给父沙箱的简单消息。看到这个例子:https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel#Scripting_panel_content'click-link'发送回使用'console.log'的插件沙箱'.port'消息系统。 – Noitidart

回答

1

如果您尝试在Firefox插件中使用JavaScript框架,您将没有快乐。至少如果你使用它们超出了单个窗口对象的范围。

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

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

因此,你可以让你的骨干/木偶工作的东西在一个面板或一个隐形页面中运行(这就是背景页面API所做的),但是如果你想让它们相互通信,你将不得不获取你的数据变成一些可编程的形状。

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

相关问题