net example es_la ejemplos javascript google-chrome facebook facebook-javascript-sdk

example - Problema de Facebook Javascript SDK: "FB no está definido"



https connect facebook net es_la sdk js (19)

¿Ha establecido la propiedad appId en su ID de aplicación actual?

El siguiente código, copiado de la documentación de Facebook here , 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 obtengo:

Uncaught ReferenceError: FB is not defined

No estoy teniendo ningún problema con el SDK en Firefox o Safari, solo Chrome.


AdBlock bloquea las secuencias de comandos de API JS de Facebook porque está relacionado con la conexión de Facebook, que a menudo es molesto.


Encontré este problema también y lo que lo resolvió no tiene nada que ver con Facebook, pero el guión anterior que incluí estaba en mal estado

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

Lo cambié a

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

Y funciona...

Weew ... espero que mi experiencia pueda ayudar a otros a atravesar esto que ha hecho casi todo pero aún no puede hacer que funcione ...

Oh chico ... ^^


Entonces, el problema es que no estás esperando que se complete el init. Esto causará resultados aleatorios. Esto es lo que 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, la función facebookInit esté disponible y ejecutada. De esta forma, no tiene que duplicar el código de inicio cada vez que quiera usarlo.

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


Este error también aparecerá si 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 breve:

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

Se llama a la función, porque sin el punto y coma la parte (''bar'') se ve como una llamada a la función que acaba de definirse.


Facebook prefiere que cargues su SDK de forma asíncrona para que no bloquee ningún otro script que necesites para tu página, pero debido al iframe existe la posibilidad de que la consola intente llamar a un método en el objeto FB antes de que el objeto FB esté completamente creado aunque FB solo se fbAsyncInit en la función fbAsyncInit .
Intente cargar el javascript de forma síncrona y ya no obtendrá el error. Para hacer esto, 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 <script> en el <head> de su página. Si debe cargar su SDK de forma asincrónica, compruebe primero que se haya creado FB antes de llamar a la función init .


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>


Intenta cargar tus scripts en la sección Head. Además, será mejor si define sus scripts bajo alguna llamada como: document.ready , si definió estos scripts en la sección del cuerpo


No estoy seguro de si todavía tiene este problema, pero tuve el mismo problema, resultó que tenía una extensión en ejecución que bloqueaba Facebook desde todos los sitios web que no son Facebook. Desactivado, funcionó!


Para probar las sugerencias de Mattys acerca de que FB no termina, 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); });


Pruebe la carga asincrónica: 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>


Si está utilizando JQuery, intente poner FB en la llamada Jquery

p.ej

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

eso funcionó para mí


Tuve el mismo problema y encontré la causa.

Tengo avast! antivirus instalado en mi computadora, y me pidió que instalara la actualización para el complemento de Chrome. El nuevo avast! plugin for chrome avast! plugin for chrome tiene la funcionalidad de bloquear anuncios y seguimiento, y, de forma predeterminada, bloquea el acceso de Facebook. ¡He resuelto mi problema simplemente permitiendo Facebook en avast! complemento de Chrome para el sitio web que necesitaba.

Como esta pregunta es muy antigua, creo que algunas personas pueden tener la misma causa que yo, ¡la nueva avast! complemento de Chrome.


Tuve el mismo problema y la única solución que encontré fue poner todo lo que utilizaba la instrucción FB dentro del script de inicio, también utilicé la carga asincrónica, por lo que la función de devolución de llamada está detrás de todo lo que necesita FB. Tengo una página común cargada dinámicamente con php por lo que muchas partes necesitan diferentes funciones de Facebook controladas por php si las declaraciones hacen que todo sea un poco complicado, ¡pero está funcionando !. si intento sacar cualquier declaración de FB del script de carga, entonces firefox muestra el mensaje "FB is not defined". Espero que ayude en cualquier cosa.


Tuve un cody muy complicado que cargó javascript de Facebook a través de AJAX y tuve que asegurarme de que el archivo js se haya cargado por completo antes de llamar a FB. 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 código usa jquery para cargar el javascript y hacer la función callback onLoad del javascript. es mucho menos complicado que tener un eventlistener onLoad para el bloque que al final no funcionó muy bien en IE6, 7 y 8


Tuve un problema similar y resultó ser Adblocker Pro. Asegúrese de verificar que esta u otras extensiones de bloqueo se hayan deshabilitado. Perdí alrededor de 1 hora y 30 minutos debido a esto. Siéntete como un novato;)


Use un setTimeout, porque a veces el FB.init tarda un poco en declararse

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


Vi un caso donde Chrome había instalado WidgetBlock que estaba bloqueando el script de Facebook. El resultado fue exactamente este mensaje de error. Asegúrese de desactivar cualquier extensión que pueda interferir.


Yo tuve el mismo problema. Las soluciones consistían en usar core.js en lugar de debug.core.js