2012-05-09 2 views
2

Firefox Extension을 빌드하고 그래프 api를 사용하고 있습니다. 아무도 각 파이어 폭스 세션에서 확장 기능을 사용하지 않기 때문에, https://stackoverflow.com/questions/10301146/facebook-login-within-a-firefox-add-on요구에 따라 Facebook Access Token을 잡아라. 그러나 어떻게?

이 잘하지만 종류의 바보 작동합니다 같은 브라우저를 시작하는 동안이 순간 나는 각 사용자의 액세스 토큰을 잡을 수있어. 그래서 내가하려는 것은 액세스 토큰을 잡거나 블라디미르 팔란트가 요구하는 방식을보다 정확하게 호출하는 것입니다. 내 코드는 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입니다. 누구나 아이디어를 가지고 있습니까, 왜냐하면 저는 상대적으로 자바 스크립트가 새로 도입 되었기 때문입니다.

답변

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

감사합니다. 나는 하나의 funktion을 움직여야했지만 지금은 효과가있다! 모든 콜백 방법이 (나 같은 10 분 전) 모르겠지만, 나는 다음과 같이 권하고 싶습니다 : http://recurial.com/programming/understanding-callback-functions-in-javascript/ – Manu

+0

후속 질문 : i 다른 장소에서 동일한 절차를 수행하십시오. 사용자가 xul 대화 상자를 가져오고 새 대화 상자를 가져 오는 버튼이 있습니다. 이제 콜백 함수로 액세스 토큰을 잡으려고 시도한 다음 액세스 토큰이있는 대화 상자를 매개 변수로 엽니 다. Problem : checkDone() 메소드는 한 번만 작동합니다. 그 후에 나는 이전 대화 상자를 닫아야하고 작동합니다. 그러나 이것은 내가 원하는 것이 아닙니다! 내가 놓친 게 무엇입니까? oO – Manu

관련 문제