Mise à jour le 04 janvier 2012
Il semble que vous ne puissiez pas simplement appeler des méthodes dépendantes de FB (par exemple FB.getAuthResponse()
) juste après FB.init()
comme avant, comme FB.init()
semble être asynchrone maintenant. Enrouler votre code dans FB.getLoginStatus()
semble faire l'affaire pour détecter quand l'API est entièrement prête :
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
ou si vous utilisez fbEnsureInit()
la mise en œuvre par le bas :
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
Poste 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 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();
}
}
}
Utilisation :
fbEnsureInit(function() {
console.log("this will be run once FB is initialized");
});