Actualización el 04 de enero de 2012
Parece que no puede simplemente llamar a métodos dependientes de FB (por ejemplo FB.getAuthResponse()
) justo después FB.init()
como antes, ya que ahora FB.init()
parece ser asíncrono. Envolver su código en FB.getLoginStatus()
respuesta parece hacer el truco de detectar cuando la API está completamente lista:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
o si usa la fbEnsureInit()
implementación desde abajo:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
Publicación original:
Si solo desea ejecutar algún script cuando FB se inicializa, puede poner alguna función de devolución de llamada dentro fbAsyncInit
:
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $conf['fb']['appid']; ?>',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Canvas.setAutoResize();
runFbInitCriticalCode(); //function that contains FB init critical code
};
Si desea un reemplazo exacto de FB.ensureInit, entonces tendrá que escribir algo por su cuenta ya que no hay un reemplazo oficial (gran error en mi opinión). Esto es lo que uso:
window.fbAsyncInit = function() {
FB.init({
appId : '<?php echo $conf['fb']['appid']; ?>',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Canvas.setAutoResize();
fbApiInit = true; //init flag
};
function fbEnsureInit(callback) {
if(!window.fbApiInit) {
setTimeout(function() {fbEnsureInit(callback);}, 50);
} else {
if(callback) {
callback();
}
}
}
Uso:
fbEnsureInit(function() {
console.log("this will be run once FB is initialized");
});