chrome.tabs.query输入错误意外结束

时间:2014-08-15 15:55:15

标签: javascript

我一直在努力,没有运气。我已经将错误和大部分上下文包含在相关块中。

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)

1 个答案:

答案 0 :(得分:2)

即使您使用同步请求,您仍然需要send它。因此,在xhr.send();xhr.open之后添加pullSecurityToken

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