在chrome.tabs.query中出现输入结束错误

Unexpected end of input error with chrome.tabs.query

本文关键字:输入 结束 错误 chrome tabs query      更新时间:2023-09-26

我一直在努力解决这个问题,没有运气。我已经包含了错误和问题块周围的大部分上下文。

var successURL = 'https://www.facebook.com/connect/login_success.html';
var userFirstName = ''
var userEmail = ''
function onFacebookLogin(){
  if (localStorage.getItem('accessToken')) {
    chrome.tabs.query({}, function(tabs) {
      for (var i = 0; i < tabs.length; i++) {
        if (tabs[i].url.indexOf(successURL) !== -1) {
          var params = tabs[i].url.split('#')[1];
          var accessToken = params.split('&')[0];
          accessToken = accessToken.split('=')[1];
          localStorage.setItem('accessToken', accessToken);
          chrome.tabs.remove(tabs[i].id);
          console.log(accessToken);
          pullSecurityToken();
          findFacebookName();
        }
      }
    });
  }
}
chrome.tabs.onUpdated.addListener(onFacebookLogin);
function pullSecurityToken(){
  var pointUrl = "localhost:3000/api/v1/retrieve_token_for/" + localStorage.accessToken + "/" + localStorage.securityToken;
  var xhr = new XMLHttpRequest();
  xhr.open("GET", pointUrl, true);
  alert(JSON.parse(xhr.responseText));
}
var response = ''
function findFacebookName(){
  if (localStorage.accessToken) {
    var graphUrl = "https://graph.facebook.com/me?access_token=" + localStorage.accessToken;
    console.log(graphUrl);
    var xhr = new XMLHttpRequest();
    xhr.open("GET", graphUrl, true);
    xhr.onreadystatechange = function () {
      if (xhr.readyState == 4) {
        if(xhr.status == '401'){
          alert("Security Token Invalid, please check and try again.");
        }
        response = JSON.parse(xhr.responseText);
        userFirstName = response.first_name
        userEmail = response.email
        console.log(response);
      }    
    }
  }
  xhr.send();
}

错误如下:

Error in response to tabs.query: SyntaxError: Unexpected end of input
    at onFacebookLogin (chrome-extension://dapeikoncjikfbmjnpfhemaifpmmgibg/background.js:7:17)

即使使用同步请求,仍然需要对其进行send。所以在pullSecurityToken里面的xhr.open后面加一个xhr.send();

正如Felix Kling在评论中指出的那样,缺少send将直接导致您的错误,因为responseText属性仍然是一个空字符串,这样的字符串不是有效的JSON,而""将是有效的JSON。