1

我在这里的回答中读到了Rob的库,这几乎正是我所需要的。

我正在使用他的库创建一个徽章:

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**)?使用or时
总是出现错误。port is undefinedbadge.portself.port

4

1 回答 1

2

您不需要自己创建消息通道。

我已经将onMessage.addListenerandsendMessage方法添加到browser-action-jplib。只需阅读文档(使用cfx sdocsdocs/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;
});
于 2013-08-22T09:50:20.027 回答