我正在写一个边缘扩展,努力在内容脚本和背景脚本之间进行通信。
我正在将一条消息从内容脚本发送到后台脚本:
browser.runtime.sendMessage({ name: "get_card_for_website", url: document.URL }, function(response) {
console.log("Got card for the website:");
console.log(response);
if (response != undefined) {
if (response.card) {
g_card = response.card;
callback(response.card);
}
}
});
后台脚本中的侦听器实现如下:
browser.runtime.onMessage.addListener(function (request, sender, sendResponse) {
if (request.name == 'get_card_for_website') {
get_card_for_website(request.url)
.done(function(element) {
if (element.cards && element.cards.length != 0) {
if (element.cards.length == 1) {
sendResponse({'card': element.cards[0]});
}
else {
get_one_card_for_site(element);
sendResponse({'card': ""});
}
}
});
}
}
调试器显示消息被发送到后台脚本,并在sendResponse之前执行相应的代码。但在内容脚本中,永远不会执行此回调函数。控制台未显示任何错误。
我会错过什么?
更新:我发现有些选项卡收到响应,有些没有。我真的不明白第一个和第二个选项卡之间的区别。