FB.getLoginStatus () llamado antes de llamar al error FB.init () en la consola

Estoy tratando de verificar si un usuario ha iniciado sesión con mi aplicación, pero obtengo un

FB.getLoginStatus () llamado antes de llamar a FB.init ().

error en la consola. los setSize parece funcionar (aunque no del todo 1,710 de altura, pero definitivamente alrededor de 1,500), así que no puedo entender por qué el getLoginStatus() da el error.

También verifiqué dos veces con el appID (eliminado a continuación) y eso es definitivamente correcto. El guión se incluye a través de <script src="file.js" type="text/javascript"></script> justo debajo de mi <body> y <div id="fb-root"></div> div

window.fbAsyncInit = function() {
FB.init({
    appId      : 'APPID', // App ID
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    oauth      : true, // enable OAuth 2.0
    xfbml      : true  // parse XFBML 
});

FB.Canvas.setSize({width: 520, height: 1710});

FB.Canvas.setAutoResize(100);

FB.getLoginStatus(function(response) {
    if (response.authResponse) {
        // logged in and connected user, someone you know
        alert("?");
    } else {
        // no user session available, someone you dont know
        alert("asd");
    }
});
};

preguntado el 08 de noviembre de 11 a las 09:11

¿Dónde estás cargando la API? -

2 Respuestas

Necesitas cargar la API de forma asincrónica. Intenta quitar tu <script src="connect.facebook.net/en_US/all.js"></script> y actualizando su JS a:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'YOUR_APP_ID', // App ID
      channelURL : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      oauth      : true, // enable OAuth 2.0
      xfbml      : true  // parse XFBML
    });

    //
    // All your canvas and getLogin stuff here
    //
  };

  // Load the SDK Asynchronously
  (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));
</script>

Oh y mira el documentación!

respondido 08 nov., 11:15

¿Puedo mezclar este código con mi código jQuery? Tengo un script que incluye un script jquery que estoy ejecutando. ¿Puedo agregar este código a eso o DEBE estar debajo del div fb-root en el cuerpo? - mauzilla

Pruébalo y verás. No puedo pensar en una razón por la que no funcionaría, siempre que sus procesos de fb se estén ejecutando en el orden correcto: Abby

jQuery también puede cargar archivos js: $.getScript(document.location.protocol + '//connect.facebook.net/en_US/all.js'); - lulalala

Mi problema es que nunca tuve la intención de hacer la aplicación FB y todavía recibo ese error. No tengo ningún ID de aplicación para poder aplicar lo que sugirió :( - user767124

Este error también ocurrirá si no proporciona un appId a FB.init. Ejemplo:

    FB.init({
        appId: ''
        , channelUrl: '//domain/channel.html'
        , status: true
        , cookie: true
    });

Resultará en:

FB.getLoginStatus () llamado antes de llamar a FB.init ().

Respondido el 15 de diciembre de 12 a las 20:12

Gracias por agregar esto. Ya había realizado el cambio asincrónico pero seguía recibiendo el error. - Brett DeWoody

Tuve el mismo problema con un mensaje de error engañoso. Esta respuesta ayudó. - en el trabajo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.