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.