С надстройкой 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(...);
Конечно, вы можете сделать это только из самого расширения, а не из скрипта контента, загруженного в панельили что-то типа того.Если вы находитесь в скрипте контента, сначала вы должны отправить сообщение на расширение, а затем оно должно переслать сообщение работнику на вкладке.