2012-03-05 52 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

相关问题