Как прослушивать сообщения в main.js с помощью browser-action-jplib

Я прочитал о библиотеке от Роба в его ответе здесь, что мне и нужно.

Я создаю значок, используя его библиотеку:

var badge = require("browserAction").BrowserAction({
    default_icon:  data.url("images/icon19.png"),
    default_title: "MyAddon",
    default_popup: data.url("pages/popup.html")
});

Всплывающее окно свяжется с основным через его протокол обмена сообщениями и будет отправлять функцию обратного вызова. Поэтому я открываю канал сообщений в main.js:

const { createMessageChannel } = require('messaging');
var options = {channelName:"PopUpMessageChannel", endAtPage: false};
var extension = createMessageChannel(options, badge.port);
extension.onMessage.addListener(function(message, sender, sendResponse) {
    if (message === 'test') {
        sendResponse("Test recieved");
    }
});

Мой вопрос: какой порт мне нужно использовать в createMessageChannel(options, **HERE**)?
Я всегда получаю сообщение об ошибке port is undefined при использовании badge.port или self.port.


person RabeNimmermehr    schedule 22.08.2013    source источник


Ответы (1)


Вам не нужно создавать канал сообщений самостоятельно.

Я уже добавил методы onMessage.addListener и sendMessage в browser-action-jplib. Просто прочитайте документацию (создана с использованием cfx sdocs из docs/browser-action.md).

Используйте его следующим образом:

const { data } = require("sdk/self");
var badge = require("browserAction").BrowserAction({
    default_icon:  data.url("images/icon19.png"),
    default_title: "MyAddon",
    default_popup: data.url("pages/popup.html")
});
badge.onMessage.addListener(function(message, sender, sendResponse) {
    if (message === "test") {
        sendResponse("Test recieved");
    }
});

Минимальный код JavaScript во всплывающем окне, например:

extension.sendMessage("test", function(message) {
    document.body.textContent = message;
});
person Rob W    schedule 22.08.2013