Не удается получить сообщение о порте из main.js в сценарии содержимого

Я пытаюсь отправить сообщение через порт из моего main.js в мой сценарий контента для моей панели. Я пробовал много вещей без везения, однако отправка сообщения из сценария содержимого в main.js работает отлично.

Вот как выглядит мой main.js:

var data = require("self").data;
var setting = require("panel").Panel({
  width: 250,
  height: 130,
  contentURL: data.url("www.google.com"),
  contentScriptFile: data.url("script.js")
});
require("widget").Widget({
  id: "sorter1",
  label: "Search Result Sorting",
  contentURL: data.url("icon.ico"),
  panel: setting
});
setting.port.emit("message");

И вот мой контент-скрипт:

self.on("message", function(addonMessage) {
  document.innerHTML = "Got Message"
});

person XrXr    schedule 19.01.2013    source источник


Ответы (2)


Я понял это несколько дней назад, просто не было времени, чтобы написать здесь.

Несколько вещей, о которых следует помнить при использовании панелей:

  • Страница панели загружается при загрузке расширения, а не при его отображении.
  • Сценарий содержимого страницы панели вставляется на страницу панели при отображении страницы (когда свойство contentScriptWhen установлено по умолчанию).
  • Сценарии содержимого не имеют доступа к дополнительным ресурсам SDK.

Вот как я это реализовал

В main.js

panel.on("show", function() {
     panel.port.emit("message");
});

Скрипт содержимого панели

self.port.on("message", function() {
    //doThings
});

port.emit() не нуждается во втором аргументе, хотя второй аргумент — это то, что будет передано сценарию содержимого для

function(secondArg) {
}
person XrXr    schedule 30.01.2013

[Обновление] Извините, я не полностью прочитал код.

Во-первых, вам действительно нужно отправить панели сообщение, например

setting.port.emit('message', someData);

Для второй части: я думаю, вы хотите:

self.port.on("message", function(addonMessage) {
    document.innerHTML = "Got Message"
});

Соответствующие документы находятся здесь:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/guides/content-scripts/using-port.html

person therealjeffg    schedule 19.01.2013
comment
Вы также должны изменить contentURL на "http://www.google.com" data.url возвращает специальную форму URL для файлов, хранящихся в каталоге данных вашего дополнения. - person paa; 20.01.2013