2012-03-05 2 views
5

Я работаю над переносом расширения Chrome в Firefox с помощью SDK надстройки Firefox.Panel & PageMod Content Script сообщение, передающееся в расширении Firefox

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

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

Следующий вопрос демонстрирует эту концепцию в среде Chrome. Мне просто нужно помочь портировать его в Firefox.
Chrome Extension - Message Passing from Popup to Content Script

ответ

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

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

+0

В соответствии с этим сообщением об ошибке https://bugzilla.mozilla.org/show_bug.cgi сравнение вкладки рабочего с активной вкладкой недостаточно, чтобы найти правильного работника, поскольку вкладка может содержать несколько старых работников в своей истории. – baseten

+0

Решение находится здесь: http://stackoverflow.com/questions/15502043/addon-sdk-context-menu-and-page-mod-workers – baseten

Смежные вопросы