我正在使用Firefox Add-on SDK将Chrome扩展程序移植到Firefox。
该扩展程序包含一个连接到toolbar button(相当于Chrome的popup.html +浏览器操作)和PageMod内容脚本的面板。
当面板打开时,它需要向当前选项卡的内容脚本发送一条消息,以接收包含该页面中某些信息的对象。我遇到麻烦的部分是如何实际传递消息。有人能指点我正确的方向吗?我似乎找不到很多资源来帮助Chrome扩展程序开发人员学习Firefox插件开发。
以下问题在Chrome环境中演示了此概念。我只需要帮助将它移植到Firefox Chrome Extension - Message Passing from Popup to Content Script
答案 0 :(得分: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(...);
当然,您只能从扩展本身执行此操作,而不能从加载到面板中的内容脚本或类似内容执行此操作。如果您在内容脚本中,则首先必须向扩展程序发送消息,然后它应该将消息转发给选项卡中的工作程序。