2012-03-05 75 views
5

我正在使用Firefox附加SDK將Chrome擴展移植到Firefox。在Firefox擴展中傳遞面板和PageMod內容腳本消息

該擴展插件由一個掛接到toolbar button(相當於Chrome的popup.html +瀏覽器操作)和PageMod內容腳本的面板組成。

當面板打開時,它需要向當前選項卡的內容腳本發送一條消息,以接收包含該頁面某些信息的對象。我遇到麻煩的部分是如何實際執行消息傳遞。有人能幫助我指出正確的方向嗎?我似乎無法找到許多資源來幫助Chrome擴展程序開發人員學習Firefox插件開發。

以下問題在Chrome環境中演示了此概念。我只需要幫助將它移植到Firefox。
Chrome Extension - Message Passing from Popup to Content Script

回答

9

這是較爲複雜與加載項SDK,因爲你不與標籤有溝通 - 你所創建的工人溝通。系統不會跟蹤工人,你必須自己動手。像這樣的東西應該工作(未經測試的代碼):

var workers = []; 
var pageMod = require("page-mod"); 
pageMod.PageMod({ 
    include: ..., 
    contentScriptFile: ..., 
    onAttach: function(worker) 
    { 
    workers.push(worker); 
    worker.on("detach", function() 
    { 
     var index = workers.indexOf(worker); 
     if (index >= 0) 
     workers.splice(index, 1); 
    }); 
    } 
}); 

這可確保workers變量含有活性工人(Worker object documentation)的列表。所以,當你需要將消息發送到分配給您做一個特定的標籤工人:

var tabs = require('tabs'); 
for (var i = 0; i < workers.length; i++) 
    if (workers[i].tab == tabs.activeTab) 
    worker.postMessage(...); 

當然,你只能從擴展本身做到這一點,而不是從內容腳本加載到面板或東西像那樣。如果您處於內容腳本中,您首先必須向擴展程序發送消息,然後應該將消息轉發給選項卡中的工作人員。

+0

根據此錯誤報告https://bugzilla.mozilla.org/show_bug.cgi比較工作人員的選項卡和活動選項卡不足以找到正確的工作人員,因爲選項卡在其歷史記錄中可能仍保留多位老員工。 – baseten 2014-08-07 11:16:34

+0

解決方案似乎在這裏:http://stackoverflow.com/questions/15502043/addon-sdk-context-menu-and-page-mod-workers – baseten 2014-08-07 11:30:25

相關問題