我刚刚开始开发我的第一个基于WebExtension的Firefox AddOn,我无法理解内容脚本和后台脚本之间的通信概念,如下所述:https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#Communicating_with_background_scripts
我已经删除了"一次性消息"示例更简单(只需将第一个链接的href发送到后台脚本),但它仍然不起作用。
清单:
{
"manifest_version": 2,
"name": "CommunicationTest",
"version": "1.0",
"background": {
"scripts": ["comm-background.js"]
},
"content_scripts": [
{
"matches": ["*://*.imdb.com/*"], // use any page as example
"js": ["comm-content.js"]
}
]
}
内容脚本:
var links = document.links;
if (links.length > 0) {
var href = links[0].href;
browser.runtime.sendMessage( { "url": href } );
console.log('(content)', href); // this log works.
}
后台脚本版本1(根据Mozilla文档)
console.log('background is here ...'); // this log works.
browser.runtime.onMessage.addListener(notify);
function notify(message) {
console.log('(background) ' + message.url);
}
后台脚本版本2(在网络中找到)
console.log('background is here ...'); // this log works.
browser.runtime.onMessage.addListener( function(message,sender,sendResponse) {
console.log('(background) ' + message.url);
});
正如您在评论中看到的,某些控制台日志有效。这意味着AddOn已加载并正在运行。我在about:debugging中将它作为临时AddOn进行测试。 其他控制台日志不起作用。但是我在控制台中收到了错误消息:
错误:无法建立连接。接收端不存在。
我想我一定错过了文档中的基本细节。