没有得到响应Chrome扩展

时间:2016-05-26 10:06:42

标签: javascript google-chrome-extension callback

我正在尝试将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的回调中接收,而不是显示未定义的。

1 个答案:

答案 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为止   叫)。