2012-01-16 46 views
2

我在Firefox Addon的main.js中有兩個內容腳本: contentScript A位於'panel'模塊(模塊A)內部 contentScript B位於'page-mod'模塊內部B) 他們如何溝通或交換信息? 我試圖通過使用以下步驟來執行此操作:1.將消息從contentScript A發送到AddonScript A 2.通過在A中包含模塊B將消息從AddonScript A發送到AddonScript B. 3.將消息從AddonScript B發送到ContentScript B. 但是,它不起作用(而是間歇性地工作,可能是由於代碼中的某些錯誤)。 。 這個方法好嗎? 任何人都可以請任何更好的方法評論? 。 ThanxFirefox Addon sdk:不同內容之間的通信腳本

+0

是的,他們不能直接相互溝通 - 他們必須通過擴展進行溝通。 – 2012-01-16 19:03:42

+0

你能否解釋'通過擴展進行溝通'。 Plz詳細闡述。網絡上的插件sdk支持很少。 – GILL 2012-01-17 12:22:13

回答

6

由於SDK的安全模型,面板和頁面模塊之間的任何通信都需要通過主要附加代碼本身進行路由。下面是從一個面板中實現的形式獲取數據並把它發送通過主腳本到一個網頁-MOD的例子:

https://builder.addons.mozilla.org/addon/1035008/latest/

的代碼的關鍵部分,這是一個:

var pagemod = require("page-mod").PageMod({ 
    include: [target], 
    contentScriptFile: [data.url('jquery-1.7.1.min.js'), data.url('page-mod.js')], 
    onAttach: function(worker) { 
     // console.log('attached...'); 
     // when we get a panel-message event from the panel 
     panel.port.on('panel-message', function(data) { 
      // we emit the same message through to the page-mod 
      worker.port.emit('panel-message', data); 
     }); 
    } 
}); 

您會注意到,當附加了page-mod時,我將面板實例設置爲捕獲「面板消息」事件,然後直接將其發送到當前頁面模式工作器中。

+0

這是一個很好的解釋,但是,我想要做的是:從面板發送消息到在瀏覽器中打開的網頁,以便可以根據面板中的輸入對頁面進行更改。這與你所建議的例子相反。 Plz的幫助。 – GILL 2012-01-19 18:00:55

+0

如果我使用'onAttach',插件代碼只執行一次,其中as,我希望在頁面加載後進行連續通信。 – GILL 2012-01-19 18:32:51

+0

後續通訊將由事件驅動。例如,每當頁面中發生的事情需要傳回到main.js時,就需要使用self.port.emit()發出一個具有適當數據的事件。在main.js中,您需要實現一個處理程序'worker.port.on(「some-event」,function(){})'來處理髮送的事件。 – canuckistani 2012-01-23 17:05:53

相關問題