我有一个背景页面和一个内容脚本。内容脚本包含以下代码:
chrome.runtime.sendMessage({ getSetting: { setting: "hideAuth" } }, function (hide) {
// this should be executed after 'respond(setting)' in the backgroud page
});
后台页面包含以下代码:
chrome.runtime.onMessage.addListener(function (msg, sender, respond) {
if (msg["getSetting"]) {
chrome.storage.sync.get(msg.getSetting.setting, function (setting) {
respond(setting); // this should callback to the content script
});
});
}
});
但是,内容脚本中的响应回调永远不会执行。我已经尝试了查询当前选项卡并手动发回消息但是选项卡仍然没有收到消息。以前有人处理过这个吗?还有另一种方法可以做到这一点吗?
答案 0 :(得分:1)
由于您异步调用respond
函数(即在chrome.storage.sync.get
的回调中,您应该在return true;
侦听器回调中添加onMessage
:
chrome.runtime.onMessage.addListener(function (msg, sender, respond) {
...
return true;
});
引用 the docs :
当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开到另一端,直到{{1}被称为。)