开发者问题收集

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