Использование графа Facebook в расширениях Chrome - PullRequest
1 голос
/ 22 декабря 2011

Я пытаюсь использовать график Facebook в расширениях Chrome, но у меня возникают проблемы с использованием токена доступа для получения разрешений. В моей папке расширений есть файл background.html с таким кодом:

function displayUser(user) {
       var userName = document.getElementById('userName');
       var greetingText = document.createTextNode('Greetings, ' + user.name + '.');
       userName.appendChild(greetingText);
    }

    var appID = "XXXXX";
    if (window.location.hash.length == 0) {
      var path = 'https://www.facebook.com/dialog/oauth?';
      var queryParams = ['client_id=' + appID,'redirect_uri=https://www.facebook.com/connect/login_success.html', 'response_type=token'];
      var query = queryParams.join('&');
      var url = path + query;
      window.open(url);
    } else {
      var accessToken = window.location.hash.substring(1);
      var path = "https://graph.facebook.com/me?";

      var queryParams = [accessToken, 'callback=displayUser'];
      var query = queryParams.join('&');
      var url = path + query;

   // use jsonp to call the graph
       var script = document.createElement('script');
       script.src = url;
       document.body.appendChild(script);        
     }

Когда я запускаю расширение, оно открывает новую вкладку с авторизацией приложения. Когда я принимаю его, он просто говорит «Успех», и URL этой вкладки выглядит так:

https://www.facebook.com/connect/login_success.html#access_token=AAABtoJwdQQgBAP8KK6QYmlQ1CJOSjQxWjXoa7qgUthF507BGPgLeWEplB87fZBpDZBZBd7CKoIWb4Fa3S2laBuZAUf795p1N3QZDZD&expires_in=5549

Итак, как теперь я могу использовать этот токен доступа в background.html и закрыть вкладку авторизации?

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Вы должны следить (в коде расширения) за изменениями вкладки при успешном переходе по URL, например:

chrome.tabs.onUpdated.addListener(onTabUpdated);

Тогда функция обработчика:

function onTabUpdated(tabId, changeInfo, tab) {
  if (changeInfo.url && changeInfo.url.indexOf(SUCCESS_URL) == 0) {
     // extract access token from url

Функция извлечения:

function accessTokenFromSuccessURL(url) {
var hashSplit = url.split('#');
if (hashSplit.length > 1) {
  var paramsArray = hashSplit[1].split('&');
  for (var i = 0; i < paramsArray.length; i++) {
    var paramTuple = paramsArray[i].split('=');
    if (paramTuple.length > 1 && paramTuple[0] == 'access_token')
      return paramTuple[1];
  }
}
return null;

}

0 голосов
/ 05 января 2012

Судя по redirect_uri=https://www.facebook.com/connect/login_success.html, я предполагаю, что вы создаете настольное или клиентское приложение.

Попробуйте добавить var RedirectURI = window.location; и измените URI перенаправления в массиве queryParams на redirect_uri= RedirectURI При необходимости вы можете добавить http://localhost к записи URL сайта в https://developers.facebook.com/apps

Как только токен получен, он перенаправляется на вашу предыдущую страницу с токеном авторизации, добавленным в виде хэша, который автоматически обрабатывается блоком else { } в вашем коде.

...