Imansible get l'object fuori function

Sto lavorando ad un progetto impressionante, normalmente uso AS3 ma adesso sto usando Javascript.

Ho le seguenti informazioni: sotto cerco di accedere alla linea di rilevamento, fondamentalmente quello che mi occorre è rilevare (nome.username risposta). Ho provato tante cose, chiunque può aiutare?

<div id="fb-root"></div> <script type="text/javascript"> $(document).ready(function(){ var appId = "121070974711874"; // If logging in as a Facebook canvas application use this URL. var redirectUrl = "http://apps.facebook.com/bggressive"; // If logging in as a website do this. Be sure to add the host to your application's App Domain list. var redirectUrl = window.location.href; // If the user did not grant the app authorization go ahead and // tell them that. Stop code execution. if (0 <= window.location.href.indexOf ("error_reason")) { $(document.body).append ("<p>Authorization denied!</p>"); return; } // When the Facebook SDK script has finished loading init the // SDK and then get the login status of the user. The status is // reported in the handler. window.fbAsyncInit = function(){ FB.init({ appId : appId, status : true, cookie : true, oauth : true }); FB.getLoginStatus (onCheckLoginStatus); }; (function(d) { var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} js = d.createElement('script'); js.id = id; js.async = true; js.src = "//connect.facebook.net/en_US/all.js"; d.getElementsByTagName('head')[0].appendChild(js); }(document)); function onCheckLoginStatus (response) { if (response.status != "connected") { top.location.href = "https://www.facebook.com/dialog/oauth?client_id=" + appId + "&redirect_uri=" + encodeURIComponent (redirectUrl) + "&scope=user_photos,friends_photos"; } else {$ // Start the application (this is just demo code)! $(document.body).append ; FB.api('/me?fields=username', function(response) { function detect(URL) { var image = new Image(); image.src = URL; image.onload = function() { var result = 'result'; // An example result } document.body.appendChild(image) } detect("https://graph.facebook.com/" + response.username + "/picture?width=200&height=200"); }); FB.api('/me/friends?fields=id,first_name', function(response) { var randomFriend = Math.floor(getRandom(0, response.data.length)); gFriendID = response.data[randomFriend].id; var randomFriend = Math.floor(getRandom(0, response.data.length)); gFriendID2 = response.data[randomFriend].id; function friend1(URL) { var image = new Image(); image.src = URL; image.onload = function() { var result = 'result'; // An example result } document.body.appendChild(image) } friend1("https://graph.facebook.com/" + gFriendID + "/picture?width=200&height=200"); function friend2(URL) { var image = new Image(); image.src = URL; image.onload = function() { var result = 'result'; // An example result } document.body.appendChild(image) } friend2("https://graph.facebook.com/" + gFriendID2 + "/picture?width=200&height=200"); }); } } }); </script> 

Se capisco correttamente, desideri visualizzare l'image dell'utente attualmente connesso e quindi detect quando l'image è stata caricata. Stai cercando di risolvere questa parte del codice:

 FB.api('/me?fields=username', function(response) { function detect(URL) { var image = new Image(); image.src = URL; image.onload = function() { var result = 'result'; // An example result } document.body.appendChild(image) } detect("https://graph.facebook.com/" + response.username + "/picture?width=200&height=200"); }); 

C'è una serie di cose in corso qui. Innanzitutto, tutte le informazioni necessarie per sapere quale image da caricare verranno fornite dal /me/ call. L'unica cosa che wherete passare alla function è una chiamata (cosa fare quando l'image viene caricata) e possibilmente la width e l'altezza.

In secondo luogo, se si imposta la properties; src dell'image, l'image verrà caricata. Se si imposta il gestore onload dopo la properties; src e l'image viene recuperata dalla cache, l'image ha già terminato il caricamento, l'evento onload sarà già stato spento e il gestore non verrà chiamato. Questo è spiegato molto meglio in questo post .

Quindi puoi farlo in questo modo:

 function detect(username) { var result = 'result'; // An example result } function displayPicture(width, height, callback) { FB.api('/me?fields=username', function(response) { var image = new Image(); image.onload = function() { callback(response.username); }; image.src = "https://graph.facebook.com/" + response.username + "/picture?width=200&height=200"; document.body.appendChild(image); }); } displayPicture(200, 200, detect); // or displayPicture(200, 200, function(username) { var result = 'result'; // An example result )); 

Beh buona fortuna! Spero che questo fosse, di fatto, quello che stavi cercando di fare.