【问题标题】:Panel & PageMod Content Script message passing in a Firefox extension面板和 PageMod 内容脚本消息在 Firefox 扩展中传递
【发布时间】:2012-03-05 18:28:40
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    Add-on 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(...);
    

    当然,您只能从扩展程序本身执行此操作,而不是从加载到面板或类似内容的内容脚本中执行此操作。如果您在内容脚本中,您首先必须向扩展程序发送一条消息,然后它应该将消息转发给选项卡中的工作人员。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多