我正在尝试将sendResponse的响应发送到chrome.runtime.sendMessage,但它始终显示未定义,下面是我的代码:
chrome.runtime.sendMessage(JSON.stringify(contact), function(response) {
console.log('Response: ', response); // This is showing undefined
});
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
contact.addContact(request, function() {
sendResponse({success: 'true'});
});
});
所以当我传递sendResponse({success:true})时,应该在chrome.runtime.sendMessage的回调中接收,而不是显示未定义的。
答案 0 :(得分:2)
问题可能是由contact.addContact
异步引起的。这意味着侦听器在调用sendResponse
之前结束。像这样从监听器返回true
应该修复它:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
contact.addContact(request, function() {
sendResponse({success: 'true'});
});
return true;
});
来自documentation of chrome.runtime.onMessage:
<强> sendResponse 强>:
有响应时调用(最多一次)的函数。争论 应该是任何可以使用JSON的对象。如果你有 在同一个文档中有多个onMessage监听器,那么只有一个 可以发送回复。 此事件在事件发生时无效 侦听器返回,除非您从事件侦听器 返回true 表示您希望异步发送响应(这将保留 消息通道打开到另一端,直到sendResponse为止 叫)。