2012-05-09 7 views
2

私はFirefox Extensionをビルドしています。私はグラフAPIを使用しています。これは正常に動作しますが、種類の愚か https://stackoverflow.com/questions/10301146/facebook-login-within-a-firefox-add-on要求に応じてFacebookのアクセストークンをキャッチしますが、どうですか?

誰もがそれぞれのFirefoxセッションで拡張を使用しませんので、:のようにブラウザを起動しながら、現時点では私は、各ユーザーのアクセストークンをキャッチ。だから、私がしようとしているのは、アクセストークンをキャッチするか、より正確にWladimir Palantが要求に応じて推薦するメソッドを呼び出すことです。私のコードはこのように見えますが、getAccessToken()は前述のメソッドです。

onLoad: function(){ 
    var NoteHandler = window.arguments[0]; 
    var sjcl = NoteHandler.sjcl; 
    NoteHandler.getAccessToken(); 
    decryptionDialog.noteHandler = NoteHandler; 
    decryptionDialog.sjcl = sjcl; 

    var currID = decryptionDialog.getID(); 

    if(currID==""){ 
     window.close(); 
     return false; 
    }else{    
     http_request = new XMLHttpRequest(); 
     http_request.open('Get', 'https://graph.facebook.com/'+currID+'/notes?access_token='+NoteHandler.token, false); 
     http_request.overrideMimeType("text/json"); 
     http_request.send(null); 

     decryptionDialog.value = decryptionDialog.ResponseToArray(http_request.responseText); 
.... 

しかしgetAccessToken()がまだアクセストークンを待っている間に問題がある、のonLoad() - メソッドが待って点灯しなくなります。したがって、要求が送信されている間は、NoteHandler.tokenはnullです。誰かがアイデアを持っています、なぜなら私は比較的新しいjavascriptだからです。

答えて

0

このコードを非同期に書き直す必要があります。getAccessToken()がすぐに結果を得るとは限りません。コールバックパラメータ、操作が完了したときに呼び出される関数(クロージャ関数)。これらの行の何か:

onLoad: function(){ 
    var NoteHandler = window.arguments[0]; 
    var sjcl = NoteHandler.sjcl; 
    NoteHandler.getAccessToken(function() 
    { 
     decryptionDialog.noteHandler = NoteHandler; 
     decryptionDialog.sjcl = sjcl; 

     ... 

     http_request.open('Get', 'https://graph.facebook.com/'+currID+'/notes?access_token='+NoteHandler.token, false); 

     ... 
    }); 
} 

... 

getAccessToken: function(callback) { 
    ... 

    // All done - call the callback 
    callback(); 
} 
+0

ありがとうございました!私は1つのfunktionを移動しなければならなかったが、今私は動作する!コールバックメソッドが何であるかわからない(私のように、10分前)、私はお勧めします:http://recurial.com/programming/understanding-callback-functions-in-javascript/ – Manu

+0

フォローアップの質問:私別の場所で同じ手順をとる。ユーザーはxulダイアログを取得し、新しいダイアログを取得するためのボタンがあります。今私はコールバック関数でアクセストークンをキャッチしようとし、その後、パラメータとしてアクセストークンを持つダイアログを開きます。問題:checkDone()メソッドは1回だけ動作します。その後、前のダイアログを閉じる必要があります。しかし、これは私が欲しいものではありません!私は何を取りこぼしたか? oO – Manu

関連する問題