Mise à jour le 04 janvier 2012
Il semble que vous ne pouvez pas simplement appeler des méthodes dépendantes de FB (par exemple FB.getAuthResponse()) juste après FB.init()comme avant, comme cela FB.init()semble être asynchrone maintenant. Envelopper votre code en FB.getLoginStatus()réponse semble faire le tour de détecter quand l'API est complètement prête:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
ou si vous utilisez l' fbEnsureInit()implémentation ci-dessous:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
Message original:
Si vous voulez simplement exécuter un script lorsque FB est initialisé, vous pouvez mettre une fonction de rappel à l'intérieur 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 vous voulez un remplacement exact de FB.ensureInit, vous devrez écrire quelque chose par vous-même car il n'y a pas de remplacement officiel (grosse erreur imo). Voici ce que j'utilise:
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();
}
}
}
Usage:
fbEnsureInit(function() {
console.log("this will be run once FB is initialized");
});