Pregunta

El siguiente código, copiada de la documentación Facebook aquí , no funciona para mí en Chrome.

<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
  FB.init({
  appId  : 'YOUR APP ID',
  status : true, // check login status
  cookie : true, // enable cookies to allow the server to access the session
  xfbml  : true  // parse XFBML
});
</script>

En la consola de Javascript consigo:

Uncaught ReferenceError: FB is not defined

No voy a tener ningún problema con el SDK en Firefox o Safari, Chrome solo.

¿Fue útil?

Solución

vi un caso en el que Chrome había instalado WidgetBlock que estaba bloqueando el guión de Facebook. El resultado fue exactamente este mensaje de error. Asegúrese de desactivar todas las extensiones que puedan interferir.

Otros consejos

Así que la cuestión es en realidad que no está esperando el inicio en completarse. Esto hará que los resultados aleatorios. Esto es lo que yo uso.

window.fbAsyncInit = function () {
    FB.init({ appId: 'your-app-id', cookie: true, xfbml: true, oauth: true });

    // *** here is my code ***
    if (typeof facebookInit == 'function') {
        facebookInit();
    }
};

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

Esto asegurará que una vez que todo está cargado, el facebookInit función está disponible y ejecutado. De esa manera usted no tiene que duplicar el código de inicio cada vez que desee utilizarlo.

function facebookInit() {
   // do what you would like here
}

Este error también aparecerá si se omite el punto y coma después de la definición fbAsyncInit.

window.fbAsyncInit = function() {
    FB.init({
        appId: 'YOUR APP ID',
        status: true,
        cookie: true,
        xfbml: true
    });
    //do stuff
}; //<-- semicolon required!

Sin el punto y coma, la situación es la misma que en este ejemplo más corto:

var x = function () {
    console.log('This is never called. Or is it?');
}

('bar');

La función se llama, porque sin el punto y coma la parte ( 'bar') es visto como una llamada a la función se acaba de definir.

Me encontrado con este problema también y lo resuelto no tiene nada que ver con Facebook, pero el guión antes Incluí que estaba en mala forma

<script type="text/javascript" src="js/my_script.js" />

He cambiado a

<script type="text/javascript" src="js/my_script.js"></script>

Y funciona ...

weew ... espero que mi experiencia puede ayudar a otros atascado en este que ha hecho casi de todo, pero todavía no puede conseguir que funcione ...

Oh Boy ... ^^

Trate asíncrono Carga: http://developers.facebook.com/docs /reference/javascript/fb.init/

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId  : 'YOUR APP ID',
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access the session
      xfbml  : true  // parse XFBML
    });
  };

  (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);
  }());
</script>

tuve una Cody muy desordenado que javascript de facebook cargado a través de AJAX y que tenía que asegurarse de que el archivo js se ha cargado por completo antes de llamar FB.init esto parece funcionar para mí

    $jQuery.load( document.location.protocol + '//connect.facebook.net/en_US/all.js',
      function (obj) {
        FB.init({
           appId  : 'YOUR APP ID',
           status : true, // check login status
           cookie : true, // enable cookies to allow the server to access the session
           xfbml  : true  // parse XFBML
        });
        //ANy other FB.related javascript here
      });

Este utiliza el código jQuery para cargar el javascript y hacer la devolución de llamada función onload del Javascript. que es mucho menos desordenado que tiene la creación de un EventListener onLoad para el bloque que al final no funcionó muy bien en IE6, 7 y 8

bloques AdBlock los guiones de Facebook API de JS porque está relacionado con Facebook Connect, que a menudo es molesto.

No estoy seguro si usted todavía está teniendo este problema, pero sólo tenía el mismo problema, resultó que tenía una extensión en ejecución que estaba bloqueando Facebook desde todos los sitios web que no es Facebook. Personas con discapacidad que, trabajado!

Utilice un setTimeout, porque a veces el FB.init toma algún tiempo para declarada

function testAPI() {
     console.log('Welcome!  Fetching your information.... ');
     FB.api('/me', function(response) {
         console.log('Good to see you, ' + response.name + '.');
     });
}
function login() {
    FB.login(function(response) {
        if (response.authResponse) {
            testAPI();
        } else {
            // cancelled
        }
    });
}
setTimeout(function() {
    login();
},2000);

Trate de cargar las secuencias de comandos en la sección de la cabeza. Por otra parte, será mejor si define las secuencias de comandos bajo alguna llamada como: document.ready, si ha definido estos scripts en sección del cuerpo

Yo tenía el mismo problema y la única solución que encontré fue poniendo todo lo que utiliza la instrucción FB dentro del script de inicio, que también se utiliza asíncrono de carga, por lo que la función de devolución de llamada es después de todo lo que necesita FB. Tengo una página común dinamycally cargado con php tantas partes necesitan diferentes funciones controladas por facebook php if que está haciendo todo lo que un poco desordenado, pero está trabajando !. Si trato de tomar cualquier declaración FB fuera de la secuencia de comandos de carga, a continuación, Firefox muestra el mensaje "FB no está definido". Esperanza que ayuda en nada.

Para probar sugerencias sobre MATTYS FB no terminar, puse una alerta en el guión. Esto causa un retraso que podría controlar. Efectivamente ... fue un problema de tiempo.

    $("document").ready(function () {
        // Wait...
        alert('Click ok to init');
        try {
            FB.init({
                appId: '###', // App ID
                status: true, // check login status
                cookie: true, // enable cookies to allow the server to access the session
                xfbml: true  // parse XFBML
            });
        }
        catch (err) {
            txt = "There was an error on this page.\n\n";
            txt += "Error description: " + err.message + "\n\n";
            txt += "Click OK to continue.\n\n";
            alert(txt);
        }
        FB.Event.subscribe('auth.statusChange', OnLogin);
    });

Yo tenía el mismo problema y he encontrado la causa.

Tengo avast! antivirus instalado en mi ordenador, y me pidió que instalar la actualización de complementos de Chrome. El nuevo avast! plugin for chrome tiene la funcionalidad para bloquear anuncios y seguimiento, y, por defecto, bloquea el acceso a Facebook. He resuelto mi problema simplemente permitiendo facebook en el avast! complementos de Chrome para el sitio web que necesitaba.

Dado que esta cuestión es muy antigua, creo que algunas personas podrían tener la misma causa que yo, el nuevo avast! complementos de Chrome.

Hay solución para usted:)

Debe ejecutar la secuencia de comandos después de la ventana de carga

si utiliza jQuery, puede utilizar de forma sencilla:

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

Yo tenía el mismo problema. Las soluciones fue usar core.js en lugar de debug.core.js

Facebook prefiere que cargue su SDK de forma asíncrona para que no bloquee las otras secuencias de comandos que necesita para su página, pero debido a la iframe hay una posibilidad de que los intentos de consola para llamar a un método en el objeto FB antes del FB objeto se creó por completo a pesar de que FB sólo se le llama en la función fbAsyncInit.
Intenta cargar el Javascript de forma sincrónica y no debe obtener el error más. Para ello se puede copiar y pegar el código que proporciona Facebook y colocarlo en un archivo .js externo y luego incluir ese archivo .js en una etiqueta en el <script> <head> de su página. Si tiene que cargar su SDK de forma asíncrona a continuación, comprobar si hay FB para crear primero antes de llamar a la función init.

Yo tenía un problema similar y resultó ser Adblocker Pro. Asegúrese de verificar que esta u otras extensiones de bloqueo ha sido desactivado. He perdido alrededor de 1 hora y 30 minutos debido a esto. Siento como tal un noob;)

Haga que se establece la propiedad Id de aplicación a su ID de aplicación actual?

Si estás usando jQuery, trate de poner FB EL PLAZO llamada Jquery

por ejemplo.

$(document).ready(function(){
    FB.Event.subscribe('auth.login', function(){
        alert('logged in!');
    });
});

que trabajó para mí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top