0

我有一个标签,其中包含以下内容:

<meta http-equiv="refresh" content="0; URL='whatsoever'" />

我还有一个正在运行的插件,它使用这种技术注册每个选项卡:

chrome.tabs.onUpdated.addListener(doStuff);

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);

我的问题是由于瞬时刷新,响应超时,控制台出现以下错误:

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

为什么会这样,我该如何规避这个问题?提前致谢。

4

1 回答 1

1

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

看:

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

来自文档: https ://developer.chrome.com/extensions/runtime#event-onMessage

function receiveMessage(request, sender, sendResponse){

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

chrome.extension.onMessage.addListener(receiveMessage);
于 2016-08-08T20:24:03.587 回答