chrome扩展消息传递无响应 - 告别:未定义

时间:2017-09-28 06:37:09

标签: javascript google-chrome-extension sendmessage message-passing

我试图通过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:无法读取属性'告别'未定义的

错误在哪里?

1 个答案:

答案 0 :(得分:1)

弹出窗口在关闭时不存在。

因此,在发送消息时,可能没有人收听,因此使用undefined作为响应调用回调(并设置了chrome.runtime.lastError)。

从架构的角度来看,后台页面始终可用于处理消息;因此,onMessage听众在大多数(并非所有)的情况下都会更好。

我建议你也看看这个问题,我会更详细地解释一些概念:Pass a variable from content script to popup

另外,以防万一,所有这些问候再见示例代码只是一个例子;你可以传递任何JSON可序列化的东西。