如何使用“browser-action-jplib”在main.js中监听消息

时间:2013-08-22 09:19:02

标签: javascript firefox-addon firefox-addon-sdk content-script browser-action

我在他的回答Rob中读到了来自here的lib,这正是我所需要的。

我正在使用他的图书馆创建徽章:

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

弹出窗口将通过他的messaging protocol与主要联系,并将发送回调函数。因此,我打开 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 undefinedbadge.port时,我总是收到错误self.port

1 个答案:

答案 0 :(得分:2)

您无需自己创建消息频道。

我已将onMessage.addListenersendMessage方法添加到browser-action-jplib。只需阅读文档(使用docs/browser-action.md中的cfx sdocs生成)。

按如下方式使用:

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;
});