1

我在Rob的回答here中阅读了关于lib的lib,这几乎正是我所需要的。如何使用“browser-action-jplib”在main.js中侦听邮件

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

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**)使用哪个端口?
当我使用badge.portself.port时,我总是收到错误port is undefined

回答

2

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

我已将onMessage.addListenersendMessage方法添加到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; 
}); 
+0

真棒,谢谢你的回复快! – RabeNimmermehr

相关问题