manager - open graph facebook html
FB.init ya ha sido llamado (3)
Estoy construyendo la aplicación facebook iframe. Mi aplicación se carga una vez (recibo signed_request una vez) y luego navego por las páginas en el iframe usando enlaces de dominio interno. Noté que veo estos mensajes extraños tanto en Chrome como en Firefox
FB.init has already been called - this could indicate a problem
Estoy bastante seguro de que este método se llama solo una vez y parece que Facebook quiere que lo llame una vez por carga de la aplicación (no una vez por página).
window.fbAsyncInit = function() {
FB.init({
appId: param(''facebook_app_id''),
frictionlessRequests: true,
oauth: true,
channelUrl: site_url(''/channel.html'')
})
}
¿Qué error (si hay) estoy haciendo aquí?
Desde el momento en que pasa los parámetros a js.src
como #xfbml=1&appId=X
, FB SDK se iniciará automáticamente y, por lo tanto, FB.init
intentará FB.init
... Por lo tanto, en su código, no tiene que quitar el FB.init
funciona, solo asegúrese de no pasar parámetros en el código que carga asincrónicamente JS SDK.
Reemplace esto:
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=X";
Con :
js.src = "//connect.facebook.net/en_US/sdk.js";
Espero que esto ayude.
Si realmente necesita llamar a init más de una vez, puede hacer esto:
FB._initialized = false;
FB.init();
pero no tiene sentido para mí, tengo un problema un poco diferente, pero también está relacionado con FB.init has already been called - this could indicate a problem
mensaje FB.init has already been called - this could indicate a problem
.
Tengo un sitio web basado en AJAX en el que, después de cada carga de página, necesito renderizar XFBML desde HTML que obtengo de la solicitud AJAX (comentarios, como botón y otros):
<div class="fb-comments" data-href="{REMOVED}" data-num-posts="5" data-width="760" colorscheme="dark"></div>
Para hacer esto, puede ejecutar esto cuando necesite renderizar XFBML:
FB.XFBML.parse();
También he tenido este problema. Simplemente FB.init({...})
parte y comenzó a funcionar con el siguiente código:
window.fbAsyncInit = function () {
FB.Event.subscribe(''auth.logout'', function () {
// subscribe parts
});
// here is where fb.init() code was
};
(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/all.js#xfbml=1&appId=X";
fjs.parentNode.insertBefore(js, fjs);
}(document, ''script'', ''facebook-jssdk''));
Supongo que ahora introduce su código automáticamente, por lo que no hay necesidad de hacerlo manualmente. Ahora mi código funciona de nuevo. Espero que esto ayude.