我试图通过Chrome扩展程序传递消息。我按照这个例子(see here) - :
content_script:
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response.farewell);
});
背景:
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:无法读取属性'告别'未定义的
错误在哪里?
答案 0 :(得分:1)
弹出窗口在关闭时不存在。
因此,在发送消息时,可能没有人收听,因此使用undefined
作为响应调用回调(并设置了chrome.runtime.lastError
)。
从架构的角度来看,后台页面始终可用于处理消息;因此,onMessage
听众在大多数(并非所有)的情况下都会更好。
我建议你也看看这个问题,我会更详细地解释一些概念:Pass a variable from content script to popup。
另外,以防万一,所有这些问候再见示例代码只是一个例子;你可以传递任何JSON可序列化的东西。