我正在使用 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
最佳答案
使用 Add-on SDK 会稍微复杂一些,因为您不与那里的选项卡通信 - 您与您创建的工作人员通信。而且系统不会跟踪 worker ,你必须自己做。像这样的东西应该可以工作(未经测试的代码):
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(...);
当然,您只能通过扩展程序本身来执行此操作,而不能通过加载到面板或类似内容的内容脚本来执行此操作。如果您在内容脚本中,您首先必须向扩展程序发送消息,然后它应该将消息转发给选项卡中的工作人员。
关于javascript - 在 Firefox 扩展中传递的面板和 PageMod 内容脚本消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571894/