0

Ich habe meine SDK eingerichtet und die Schaltfläche feuert die checkLoginState Funktion, aber die FB.login wird nicht aufgerufen. Ich benutze die neueste Version (v2.9). Ich habe auch versucht, 2.8 zu verwenden.FB.login() wird nicht aufgerufen

Ich vermute, es hat etwas damit zu tun, asynchron zu sein, aber ich kann nicht herausfinden, was als nächstes zu tun ist.

Der Code:

<script> 
    window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : 'xxxxxxxxxxx', 
     status : true, 
     cookie : true, 
     xfbml  : true, 
     version : 'v2.8' 
    }); 
    }; 

    (function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 
</script> 

<fb:login-button onlogin="checkLoginState();" show-faces="false" scope="email,public_profile" width="400"></fb:login-button> 

<script type='text/javascript'> 

    function checkLoginState() { 
     FB.getLoginStatus(function(response) { 
     statusChangeCallback(response); 
     }); 
    } 

    function statusChangeCallback(response) { 
     if (response.status !== 'connected'){ 
      Facebook_login(); 
     } 
     else{ 
      console.log(response); 
     } 
     } 

    function Facebook_login() { 

     FB.login(function (response) { <--- debugger comes here 
      if (response.status === 'connected') { <----- but not here :-(
       //do stuff 
      } 

     }); 
    } 

+0

Was ist "Antwort" in 'FB.login'? Probieren Sie es mit '==' anstelle von '==='. –

+0

@JayGould Antwort ist "unbekannt" – rory

+1

Die Login-Schaltfläche führt die Anmeldung selbst aus, Sie müssen FB.login nicht selbst aufrufen, wenn Sie diese Schaltfläche verwenden. Und wie Sie es callen, wird es innerhalb der Callback-Funktion von asynchronen Methoden höchstwahrscheinlich durch den Popup-Blocker des Browsers blockiert. – CBroe

Antwort

1

Der Login-Button führt die Anmeldung auf seine eigene, müssen Sie FB.login sich nicht aufrufen, wenn Sie die Taste verwenden.

FB.login ist für, wenn Sie Ihre eigenen Link/Schaltfläche verwenden möchten, um die Anmeldung auszulösen.


Und so, wie Sie es nennen, in der Callback-Funktion von asynchronen Methoden, wird es höchstwahrscheinlich durch den Popup-Blocker des Browsers blockiert werden. Wenn Sie FB.login verwenden, sollten Sie es immer nur bei direkter Benutzerinteraktion (d. H. Einem Klick auf einen Link/eine Schaltfläche) aufrufen und es nicht in Async-Callbacks einbetten.

0
<span><a onclick="fbLogin()" id="fbLink" class="btn faceebook btn-circle muliregular text-capitalize"><i class="fa fa-facebook"></i> Facebook </a></span> 

var global_fb = false; 

    window.fbAsyncInit = function() { 
    // FB JavaScript SDK configuration and setup 
    FB.init({ 
    appId  : 'xxxxxxxx', // FB App ID 
    cookie  : true, // enable cookies to allow the server to access the session 
    xfbml  : true, // parse social plugins on this page 
    version : 'v2.8' // use graph api version 2.8 
    }); 

    // Check whether the user already logged in 
    FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
    //display user data 
    getFbUserData(); 
    } 
    }); 
    }; 

    // Load the JavaScript SDK asynchronously 
    (function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

    // Facebook login with JavaScript SDK 
    function fbLogin() { 
    global_fb = true; 
    FB.login(function (response) { 
    if (response.authResponse) { 
    // Get and display the user profile data 
    getFbUserData(); 
    } else { 

    } 
    }, {scope: 'email'}); 
    } 

    // Fetch the user profile data from facebook 
    function getFbUserData(){ 
    FB.api('/me', {locale: 'en_US', fields: 'id,first_name,last_name,email,link,gender,locale,picture'}, 
    function (response) { 
    $.post('loginwithfacebook',{userData:response},function(data){ 
    if(data.id != ""){ 
     if(global_fb == true){ 
      // do something 
     } 
    } 
    }); 
    }); 
    }