2011-12-22 5 views
1

Chrome拡張機能でFacebookグラフを使用しようとしていますが、アクセストークンを使用してアクセス権を取得する際に問題があります。私の拡張フォルダには、次のコードを含むbackground.htmlファイルがあります。Chrome拡張機能でFacebookグラフを使用

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で、このアクセストークンを使用し、その承認]タブを閉じることができますか?

答えて

1

あなたはその後、この

chrome.tabs.onUpdated.addListener(onTabUpdated); 

ハンドラ関数のような成功URLとタブの変更について(延長コードで)見てください。

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

redirect_uri=https://www.facebook.com/connect/login_success.htmlで判断すると、私はあなたがデスクトップまたはクライアント側のアプリケーションを構築していると仮定しています。 var RedirectURI = window.location; を追加

試してみて、必要に応じてredirect_uri= RedirectURI にqueryParams配列のリダイレクトURIを変更する、あなたはhttps://developers.facebook.com/apps

にサイトのURLエントリにhttp://localhostを追加することができ、トークンが取得されたら、それは以前にリダイレクトされますページには、承認トークンがハッシュとして追加され、コードのelse { }ブロックによって自動的に処理されます。

関連する問題