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對象(值包)並從中重新創建正確類型的模型。這要求對象可以根據其可枚舉的自身屬性進行完全重構。

相關問題