chrome 扩展消息传递无响应-告别:未定义
2017-09-28
1226
我正在尝试在 chrome 扩展中传递消息。我按照此示例( 参见此处 )- :
content_script:
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response.farewell);
});
background:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
});
});
popup.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting == "hello")
console.log("message recive")
sendResponse({farewell: "goodbye"});
});
尽管我确实复制粘贴了 - 但消息未发送。错误弹出:
事件处理程序中的错误(未知):TypeError:无法读取未定义的属性“farewell”
错误在哪里?
1个回答
弹出窗口在关闭时不存在。
因此,在发送消息时可能无人在听,因此回调函数以
undefined
作为响应(并设置
chrome.runtime.lastError
)。
从架构的角度来看,后台页面始终可用于处理消息;因此,在
大多数
(并非全部)情况下,
onMessage
监听器最好放在那里。
我建议您也看一下这个问题,我在其中更详细地解释了一些概念: 将变量从内容脚本传递到弹出窗口 。
另外,以防万一,所有这些问候-再见示例代码只是一个例子;您可以传递任何可 JSON 序列化的内容。
Xan
2017-09-28