Google chrome extension Chrome扩展消息传递超时

Google chrome extension Chrome扩展消息传递超时,google-chrome-extension,timeout,message,Google Chrome Extension,Timeout,Message,我有一个选项卡,其中包括以下内容: <meta http-equiv="refresh" content="0; URL='whatsoever'" /> doStuff函数向选项卡发送一条消息: function doStuff(tabId, changeInfo, tab){ chrome.tabs.sendMessage(tabId, {'message': 'content'}, function(response){ doOtherStuff(

我有一个选项卡,其中包括以下内容:

<meta http-equiv="refresh" content="0; URL='whatsoever'" />
doStuff函数向选项卡发送一条消息:

function doStuff(tabId, changeInfo, tab){

    chrome.tabs.sendMessage(tabId, {'message': 'content'}, function(response){

        doOtherStuff(response);

    });

}
我注册了一个脚本(此处未看到),在该脚本中,会发生以下情况:

function receiveMessage(request, sender, sendResponse){

    sendResponse({'content': 'responseData'});

}

chrome.extension.onMessage.addListener(receiveMessage);
我的问题是,由于瞬时刷新,响应超时,控制台中出现以下错误:

无法发送响应:chrome.extension.onMessage侦听器必须 如果要在侦听器返回后发送响应,则返回true (消息由扩展名XYZ发送)


为什么会这样?我怎样才能避免这个问题?提前感谢。

它说,函数receiveMessage应该退出并返回true;。只有这样,消息才会继续发送。如果为false,则在函数返回时中止。所以添加returntrue

见:

当事件侦听器返回时,此函数无效,除非 您从事件侦听器返回true,以指示您希望发送 异步响应(这将使消息通道对 另一端(直到调用sendResponse)

从文档:


您的
doStuff函数()在哪里?
在background.js中,它注册在清单的background->scripts部分。它与第一个代码段所在的文件相同。sendresponse是否超时?如果我返回true并且从不调用sendresponse,我会因为收到许多消息而没有响应而收到任何错误吗?我在谷歌上搜索了很多,但找不到这个答案!
function receiveMessage(request, sender, sendResponse){

    sendResponse({'content': 'responseData'});

}

chrome.extension.onMessage.addListener(receiveMessage);
function receiveMessage(request, sender, sendResponse){

    sendResponse({'content': 'responseData'});
    return true;
}

chrome.extension.onMessage.addListener(receiveMessage);