javascript - 在 Firefox 扩展中传递的面板和 PageMod 内容脚本消息

标签 javascript firefox firefox-addon firefox-addon-sdk

我正在使用 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/

相关文章:

javascript - 有条件地分割和连接文本

javascript - bin-packaging 布局与 masonry.js 或 isotope.js 类似,无需按现有元素排序

javascript - 文本区域的值(value)?如何填写一个?

javascript - 使用 Permissions API 从 Firefox 中的 <select> onchange 处理程序请求权限

javascript - 尝试检测第二次单击复选框时出现停止传播问题

Javascript 片段卡住 Firefox3.6

java - Selenium Web Driver - 如何在后台运行 Firefox

javascript - 如何在按钮单击时停止 Firefox 插件?

firefox-addon - 更改 Firefox 插件安装图标

javascript - 如何在 jquery html 字符串中包含内联 onclick