我在他的回答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 undefined
或badge.port
时,我总是收到错误self.port
。
答案 0 :(得分:2)
您无需自己创建消息频道。
我已将onMessage.addListener
和sendMessage
方法添加到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;
});