getAuthToken回调中的sendResponse不起作用

时间:2018-04-05 05:30:45

标签: javascript

我在使用后台脚本中的sendResponse到弹出脚本时遇到问题。我发现问题涉及到我试图从getAuthToken回调中发送响应。我该如何解决这个问题?

chrome.extension.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.task == "auth") {
      chrome.identity.getAuthToken({
        'interactive': true
      }, function(token) {
        if (chrome.runtime.lastError) {
          alert(chrome.runtime.lastError.message);
          return;
        }
      })

      var x = new XMLHttpRequest();
      x.open('GET', 'https://www.googleapis.com/oauth2/v2/userinfo?alt=json&access_token=' + token);

      x.onload = function() {
        if (x.readyState = 200) {
          var data = this.responseText;
          jsonResponse = JSON.parse(data);
          sendResponse({
            response: jsonResponse
          }); //return the email to the popup
          return true;
        };
      }
      x.send();
    }; //end of auth

1 个答案:

答案 0 :(得分:0)

您必须从传递给addListener的回调中返回true,以便能够从异步运行的代码中使用sendResponse。这是documentation

  

在上面的示例中,sendResponse是同步调用的。如果要异步使用sendResponse,请添加return true;到onMessage事件处理程序。