我必须调用return true每次我使用onMessage.addListener responseCallback
Do I have to call return true each time I use onMessage.addListener responseCallback?
我有一个onMessage。addListener函数:
chrome.runtime.onMessage.addListener(function (r, s, sendResponse) {
if (r.action == "read") {
readManga(request, function () {
sendResponse({});
}, true);
}
if (r.action == "write") {
readManga(request, function () {
sendResponse({});
}, true);
}
if (request.action == "update") {
$.each(request.list, function (index, val) {
resetManga(val, function () {}, false);
});
saveList();
refreshUpdate();
sendResponse({});
}
if (request.action == "release") {
releaseImplentationFromId(request.id, function (mirrorName) {
updateMirrors(function () {
sendResponse({
mirror : mirrorName
});
});
return true
});
}
}
(这是一个节选,但它是工作代码,请忽略所有的if,我应该用case从很久以前)
每次我使用回调函数sendResponse
(再次,我需要重命名它,但让我们忽略它),在文档中定义的从来没有使用,除非我有return true
后,它的执行。这真的有必要吗,还是我只是发现了一个肮脏的黑客,我做错了什么?
这是预期的行为,并在文档中明确说明:
当事件侦听器返回时,此函数[
sendResponse
]失效,除非您从事件侦听器返回true
以表明您希望异步发送响应(这将保持消息通道向另一端打开,直到sendResponse
被调用)。
你的函数updateMirrors
显然是异步的:回调函数不会立即执行,而是被发送到队列中。所以,你没有在执行之后返回true,你实际上是在sendResponse
之前点击return true
。
因此,有必要告诉Chrome "expect an answer later"
相关文章:
- WebSocket onmessage not firing
- Chrome onMessage.addListener 仅在有时执行
- EventSource onmessage()在onopen()和oneror()正常工作的地方不起作用
- self.postMessage和onMessage don'不适用于上下文项
- “onmessage”和“.addEventListener”之间有什么区别
- WebSocket.onmessage没有'不起作用
- 多个chrome.runtime.onMessage-Listeners-断开连接的端口错误
- Chrome 扩展程序 - onRequest/sendRequest vs onMessage/sendMessage
- WebSocket onMessage 在 AJAX 请求期间未触发
- 无法在扩展程序之间获取 chrome.runtime.onMessage外部工作
- 大气响应,广播不调用 javascript onMessage 处理程序
- 控制台.log在 chrome.runtime.onMessage.addListener 中不起作用
- onMessage 未在 Chrome 扩展程序上执行
- WebSocket:onMessage() 仅在服务器关闭连接时触发
- Chrome onMessage侦听器总是发送'未定义'回答
- 发送消息时未调用WebSocket onmessage()
- 如何在面板中发出消息's onMessage方法
- websocket客户端中的onmessage事件未被激发
- 添加到WebSocket.onmessage()中,就像jQuery添加到事件中一样
- 在Web Worker onmessage回调中调用postMessage会引发SYNTAX_ERR:DOM异常12