FF Addon (JPM) Передача сообщения из скрипта Panel в основной индексный скрипт
Я разрабатываю расширение FireFox с использованием JPM Addon. Я загружаю панель из основного файла index.js примерно так...
var panel = require('sdk/panel');
var panel = panel.Panel({
contentURL: url('pages/popup.html'),
onHide: doHide
});
//and in another place...
panel.show({
position: button
});
Файл pages/popup.html ссылается на файл javascript, и я использую относительный путь для его загрузки. Мне нужно выяснить, как передать сообщение из этого файла javascript, загруженного веб-страницей панели, в основной файл сценария index.js дополнения.
Я пробовал postMessage так же, как port.emit...
Так что либо
//index.js
panel = require("sdk/panel").Panel({
onMessage: function(message) {
console.log(message);
}
});
//popup.js - panel file
panel.postMessage('something');
...или же...
//index.js
panel.on("message", function(text) {
console.log(text);
});
//popup.js
self.port.emit('message', 'hello world');
Тем не менее, оба из них, похоже, не работают. Помогите!
1 ответ
Вам следует прочитать раздел " Сценарии содержания доверенной панели " на странице MDN SDK / Panel. Наиболее актуальный текст:
Как и сценарий содержимого, эти сценарии могут взаимодействовать с кодом дополнения с помощью
postMessage()
API илиport
API. Принципиальное отличие состоит в том, что эти сценарии получают доступ кpostMessage
а такжеport
объекты черезaddon
объект, а контентные скрипты обращаются к ним черезself
объект.
Итак, ваш код popup.js должен быть:
addon.port.emit('message', 'hello world');
И ваш index.js:
panel.port.on("message", function(text) {
console.log(text);
});
В разделе " Сценарии содержимого доверенной панели " есть пример надстройки, показывающий взаимодействие в обоих направлениях между доверенной панелью (содержимое панели происходит из надстройки) и основным фоновым сценарием надстройки.