Aggiornamento il 4 gennaio 2012
Sembra che non sia possibile chiamare metodi dipendenti da FB (ad esempio FB.getAuthResponse()) subito dopo FB.init()come prima, poiché ora FB.init()sembra essere asincrono. Il wrapping del codice in FB.getLoginStatus()risposta sembra fare il trucco per rilevare quando l'API è completamente pronta:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
o se si utilizza l' fbEnsureInit()implementazione dal basso:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
Post originale:
Se vuoi solo eseguire uno script quando FB è inizializzato, puoi inserire alcune funzioni di callback all'interno 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
};
Se vuoi la sostituzione esatta di FB.ensureInit, dovresti scrivere qualcosa da solo poiché non esiste una sostituzione ufficiale (grande errore imo). Ecco cosa 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");
});