5

Ho il seguente codice ma FB.login fornisce un FB non definito errore javascript.FB non è definito in Facebook Login

Cosa mi manca?

<html> 
<body> 
<div id="fb-root"></div> 
<script> 
window.fbAsyncInit = function() 
{ 
FB.init 
({ 
    appId : 'XXXX', 
    status : true, 
    cookie : true, 
    xfbml : true 
}); 
}; 

(function() 
{ 
var e = document.createElement('script'); 
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
e.async = true; 
document.getElementById('fb-root').appendChild(e); 
}()); 



FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 


</script> 
hello 
<fb:login-button></fb:login> 

</body> 
</html> 

risposta

7

La funzione assegnata a window.fbAsyncInit viene eseguita non appena viene caricato l'SDK. Qualsiasi codice che si desidera eseguire dopo che l'SDK è stato caricato deve essere collocato all'interno di questa funzione e dopo la chiamata a FB.init. Ad esempio, è qui che verificherai lo stato di accesso dell'utente o ti iscriverai a qualsiasi evento di Facebook in cui la tua applicazione sia interessata.

Prova mantenendo altro codice di inizializzazione in tra funzione inialization ed effettuare il login

O mantenere il codice FB.login a $ (document) .ready

$(document).ready(function(){ 

FB.login(function(response) 
{ 
if(response.session) 
{ 
    if(response.perms) 
    { 
     alert('yippee'); 
    } 
    else 
    { 
     alert('oh no'); 
    } 
} 
else 
{ 
    alert('login silly'); 
} 
}, {perms:'email,user_birthday'}); 

}); 
5

Non si dovrebbe chiamare per FB.login prima di JS-SDK è caricato, window.fbAsyncInit progettato appositamente per questo. Se sposti questa chiamata entro la funzione window.fbAsyncInit, starai bene, ma tieni presente che la chiamata a FB.login apre la finestra popup, in questo caso l'interazione dell'utente verrà probabilmente bloccata dalla maggior parte dei browser. Se si desidera utilizzare FB.login per gestire login, è necessario farlo su click o sumbit eventi ...

A proposito, avete già fb:login-button che sta facendo login una volta utente fa clic su di esso.

1

È inoltre possibile ottenere questo errore se si tenta di lanciare il numero facebook example code sulla macchina (ad es. copiare il codice in un file .html e tentare di aprirlo nel browser). Dovrai caricarlo sul tuo server ed eseguirlo da lì.