Я разрабатываю расширение FireFox с помощью JPM Addon. Я загружая панель из основного index.js файл как так ...FF Addon (JPM) Передача сообщения из сценария Panel в основной индексный скрипт
var panel = require('sdk/panel');
var panel = panel.Panel({
contentURL: url('pages/popup.html'),
onHide: doHide
});
//and in another place...
panel.show({
position: button
});
Файла страницы/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');
Однако оба этих дону Кажется, он работает. Помогите!
Можно ли также вызвать функцию из сценария аддона? На самом деле, я переношу расширение Chrome и не могу использовать обратный вызов для того, что мне нужно. –
@ShahidThaika, передача сообщений асинхронна (потенциально из одного процесса в другой). Это верно и в Chrome. Если вы имеете в виду синхронную функцию для * отправки * сообщения из сценария добавления, то да. Для вышеуказанного кода это будет 'panel.port.emit (nameOfMessage, message);'. BTW: Если вы переносите расширение Chrome, и вы еще этого не сделали, вы можете взглянуть на [WebExtensions] (https://developer.mozilla.org/en-US/Add-ons/WebExtensions) API, который очень похож на расширения Chrome. – Makyen
Я использовал функцию в панели, чтобы вернуть строку на основе локализации браузера. Однако в FF кажется, что вам нужно использовать require ('sdk/l10n'). Get, который доступен только через файл index.js. Мне нужно выяснить, как вызвать функцию локализации. –