Pregunta ¿Cómo solucionar 'FB no está definido'?


A veces recibo el problema "FB is not defined" cuando cargo el http://connect.facebook.net/en_US/all.js 

Me di cuenta de que el problema es porque a veces mi sitio web simplemente no carga ese archivo. Entonces no obtiene nada, y el objeto FB literalmente no existe.

Mi solución es prevenir a mis usuarios cuando esto sucede, así que probé los siguientes códigos en JavaScript pero ninguno parece funcionar:

if (FB) {/*run the app*/} else {/*alert the user*/}
if (FB!==false) {/*run the app*/} else {/*alert the user*/}
if (FB!='undefined') {/*run the app*/} else {/*alert the user*/}

¡gracias por la respuesta!


32
2018-03-16 20:08


origen


Respuestas:


Asumiendo que FB es una variable que contiene el objeto de Facebook, probaría algo como esto:

if (typeof(FB) != 'undefined'
     && FB != null ) {
    // run the app
} else {
    // alert the user
}

Con el fin de probar que algo no está definido en el antiguo JavaScript, debería usar el operador "typeof". La muestra que muestra donde la compara con la cadena 'indefinido' se evaluará como falsa a menos que su objeto FB realmente contenga la cadena 'indefinido'.

Como comentario adicional, es posible que desee utilizar varias herramientas como Firebug (en Firefox) para ver si puede averiguar por qué el archivo de Facebook no se está cargando.


16
2018-03-16 20:18



Creo que debería resolver el problema principal en su lugar, qué solución es proporcionada por Facebook (Cargando el SDK de forma asincrónica)

Debe insertarlo directamente después de la etiqueta de apertura en cada página que desea cargarlo:

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'your-app-id',
      xfbml      : true,
      version    : 'v2.1'
    });
  };

  (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>

Desde el documentación:

El SDK de Facebook para JavaScript no tiene ningún archivo independiente que   necesita ser descargado o instalado, en su lugar solo necesita incluir   una pequeña porción de JavaScript regular en su HTML que lo hará   carga asincrónicamente el SDK en tus páginas. La carga asíncrona significa   que no bloquea la carga de otros elementos de tu página.

ACTUALIZAR: utilizando el último código de la documentación.


77
2018-03-16 21:14



Supongo que te perdiste para poner punto y coma ; en la llave de cierre } de window.fbAsyncInit = function() { ... };


11
2018-04-27 03:53



Para las personas que todavía tienen este error FB, uso este arreglo descarado para este problema.

En lugar de http://connect.facebook.net/en_US/all.js, Solía HTTPS y lo cambió a https://connect.facebook.net/en_US/all.js y solucionó mi problema


9
2018-05-11 08:43



Hay una solución para ti :)

Debe ejecutar su secuencia de comandos después de la ventana cargada

si usas jQuery, puedes usar una forma simple:

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : 'your-app-id',
            xfbml      : true,
            status     : true,
            version    : 'v2.5'
        });
    };

    (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>

<script>
$(window).load(function() {
    var comment_callback = function(response) {
        console.log("comment_callback");
        console.log(response);
    }
    FB.Event.subscribe('comment.create', comment_callback);
    FB.Event.subscribe('comment.remove', comment_callback);
});
</script>

4
2018-06-25 17:11



Estuviste muy cerca con tu ejemplo original. Puede usar la sugerencia de @ jAndy o:

if (typeof FB != 'undefined')

2
2018-03-16 20:18



Es bastante extraño que FB no se cargue en tu javascript si tienes la etiqueta del script allí correctamente. Comprueba que no tengas bloqueadores de javascript, bloqueadores de anuncios, bloqueadores de seguimiento, etc. instalados en tu navegador que neutralicen tu código de FB Connect.


1
2018-03-16 20:23



Tenía FB nunca definido. Resultó que estaba creando prototipos de funciones en la clase Object llamada "merge" y otra llamada "toArray". Ambos arruinaron Facebook, no hubo mensajes de error pero no se cargó.

Cambié los nombres de mis prototipos, funciona ahora. Oye, si Facebook va a prototipo Object, ¿no debería permitírseme prototiparlo?


1
2018-02-26 19:40