Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript chrome.runtime.onMessage中的sendResponse不';行不通_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript chrome.runtime.onMessage中的sendResponse不';行不通

Javascript chrome.runtime.onMessage中的sendResponse不';行不通,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,内容脚本 chrome.runtime.sendMessage({ method: "getComments" }, function(response) { var comments = response.arr; //response is undefined ... }); 背景页 chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) { if (request

内容脚本

chrome.runtime.sendMessage({
    method: "getComments"
}, function(response) {
    var comments = response.arr;  //response is undefined
    ...
});
背景页

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.method === "getComments")
  chrome.tabs.query({
    'active': true,
    'lastFocusedWindow': true
  }, function(tabs) {
    var serverUrl = newServerUrl + '?domain=' + tabs[0].url;
    var xhr = new XMLHttpRequest();
    xhr.open("GET", serverUrl);
    xhr.setRequestHeader("Content-type", "application/json");
    xhr.onload = ()=> {
      sendResponse({arr: 'something'});  //it seems this is not working
    };
    xhr.send();
  });
我正在尝试使用后台页面获取当前选项卡的地址,将该地址发送到服务器以检索数据,并将检索到的数据传递回内容脚本。但是sendResponse不会向内容脚本返回任何内容。我正在开发一个chrome扩展。

阅读了

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

因此,在
getComments
的情况下,您需要
返回true
,如下所示

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method === "getComments") {
        chrome.tabs.query({
            'active': true,
            'lastFocusedWindow': true
        }, function(tabs) {
            var serverUrl = newServerUrl + '?domain=' + tabs[0].url;
            var xhr = new XMLHttpRequest();
            xhr.open("GET", serverUrl);
            xhr.setRequestHeader("Content-type", "application/json");
            xhr.onload = () => {
                sendResponse({
                    arr: 'something'
                }); //it seems this is not working
            };
            xhr.send();
        });
        return true;
    }
});