Javascript 未触发browser.runtime.onMessage
我正在开发firefox扩展,script.js中有以下代码:Javascript 未触发browser.runtime.onMessage,javascript,google-chrome-extension,firefox-addon-webextensions,Javascript,Google Chrome Extension,Firefox Addon Webextensions,我正在开发firefox扩展,script.js中有以下代码: browser.runtime.sendMessage({book:book,link:book.reviewsLink,type:"getBSR"}, (response) => { console.log(response); //CODE }); 在background.js中: browser.runtime.onMessage.addListener((request, sender, sen
browser.runtime.sendMessage({book:book,link:book.reviewsLink,type:"getBSR"}, (response) => {
console.log(response);
//CODE
});
在background.js中:
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
console.log("HELLO FROM BACKGROUND");
//CODE
});
script.js会立即打印“undefined”,但在后台控制台不会打印“HELLO FROM background”,因此侦听器无法工作。我的chrome扩展上有相同的代码,唯一改变的是chrome.runtime而不是browser.runtime
我真的很困惑,因为Mozilla文档的代码和我的完全一样。正如wOxxOm所提到的,
浏览器
返回一个承诺
,而浏览器
返回一个回调
函数。这意味着:
// callback
chrome.runtime.sendMessage({book:book,link:book.reviewsLink,type:"getBSR"}, (response) => {
console.log(response);
//CODE
});
// Promise
browser.runtime.sendMessage({book:book,link:book.reviewsLink,type:"getBSR"}).then((response) => {
console.log(response);
//CODE
});
同样正如wOxxOm所提到的,没有足够的信息来正确回答。每个都在什么时候运行,在哪个上下文中etcfirefoxwebextension应该在侦听器中执行
return
(允许使用Promise),而不是调用sendResponse或返回true
。至于这个问题,听起来你可能有两个听众,一个不同的听众首先回答。如果我不亲自尝试扩展,我就无能为力了。