Передача сообщений Panel & PageMod Content Script в расширении Firefox - PullRequest
5 голосов
/ 05 марта 2012

Я работаю над переносом расширения Chrome на Firefox с помощью SDK надстройки Firefox.

Расширение состоит из панели, подключенной к кнопке на панели инструментов (эквивалент действия браузера Chrome popup.html +) и сценария содержимого PageMod.

Когда панель открывается, ей нужно отправить сообщение в скрипт содержимого текущей вкладки, чтобы получить объект, содержащий некоторую информацию с этой страницы. У меня проблемы с тем, как на самом деле передавать сообщения. Может ли кто-нибудь помочь направить меня в правильном направлении? Кажется, я не могу найти много ресурсов, чтобы помочь разработчикам расширений Chrome освоить разработку аддонов Firefox.

Следующий вопрос демонстрирует эту концепцию в среде Chrome. Мне просто нужна помощь, чтобы перенести его на Firefox.
Расширение Chrome - передача сообщений из всплывающего окна в сценарий содержимого

1 Ответ

9 голосов
/ 06 марта 2012

С надстройкой 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 документация по объекту ).Поэтому, когда вам нужно отправить сообщение работнику, назначенному для конкретной вкладки, вы делаете это:

var tabs = require('tabs');
for (var i = 0; i < workers.length; i++)
  if (workers[i].tab == tabs.activeTab)
    worker.postMessage(...);

Конечно, вы можете сделать это только из самого расширения, а не из скрипта контента, загруженного в панельили что-то типа того.Если вы находитесь в скрипте контента, сначала вы должны отправить сообщение на расширение, а затем оно должно переслать сообщение работнику на вкладке.

...