chrome 扩展消息传递无响应-告别:未定义
chrome extension message passing no response-farewell: undefined
我正在尝试传递一个 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:无法读取未定义的 属性 'farewell'
哪里错了?
弹出窗口在关闭时不存在。
因此,在发送消息的那一刻,可能没有人在听,所以回调以 undefined
作为响应调用(并设置了 chrome.runtime.lastError
)。
从体系结构的角度来看,后台页面是始终可用于处理消息的页面;因此,onMessage
听众在 大多数 (并非全部)情况下会更好。
我也建议您看看这个问题,我在其中更详细地解释了一些概念:。
另外,为了以防万一,所有的问候-再见示例代码只是一个示例;你可以传递任何 JSON-serializable.
我正在尝试传递一个 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:无法读取未定义的 属性 'farewell'
哪里错了?
弹出窗口在关闭时不存在。
因此,在发送消息的那一刻,可能没有人在听,所以回调以 undefined
作为响应调用(并设置了 chrome.runtime.lastError
)。
从体系结构的角度来看,后台页面是始终可用于处理消息的页面;因此,onMessage
听众在 大多数 (并非全部)情况下会更好。
我也建议您看看这个问题,我在其中更详细地解释了一些概念:
另外,为了以防万一,所有的问候-再见示例代码只是一个示例;你可以传递任何 JSON-serializable.