关于javascript:Chrome扩展程序消息传递:未发送响应

Chrome Extension Message passing: response not sent

我试图在内容脚本和扩展名之间传递消息

这是我在content-script中的内容

1
2
3
chrome.runtime.sendMessage({type:"getUrls"}, function(response) {
  console.log(response)
});

在我的后台脚本中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.type =="getUrls"){
      getUrls(request, sender, sendResponse)
    }
});

function getUrls(request, sender, sendResponse){
  var resp = sendResponse;
  $.ajax({
    url:"http://localhost:3000/urls",
    method: 'GET',
    success: function(d){
      resp({urls: d})
    }
  });

}

现在,如果我在getUrls函数中的ajax调用之前发送响应,则响应成功发送,但是当我发送响应时,在ajax调用的success方法中它不发送它,当我进入调试时 可以看到sendResponse函数的代码中的端口为null。


chrome.runtime.onMessage.addListener的文档:

This function becomes invalid when the event listener returns, unless you return true from the event listener to indicate you wish to send a response asynchronously (this will keep the message channel open to the other end until sendResponse is called).

因此,您只需在调用getUrls之后添加return true;,以指示您将异步调用响应函数。