Pembaruan pada 4 Januari 2012
Sepertinya Anda tidak bisa begitu saja memanggil metode yang bergantung pada FB (misalnya FB.getAuthResponse()) tepat setelah FB.init()seperti sebelumnya, karena FB.init()tampaknya tidak sinkron sekarang. Membungkus kode Anda menjadi FB.getLoginStatus()respons tampaknya melakukan trik untuk mendeteksi ketika API sepenuhnya siap:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
atau jika menggunakan fbEnsureInit()implementasi dari bawah:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
Posting Asli:
Jika Anda ingin menjalankan beberapa skrip saat FB diinisialisasi, Anda dapat meletakkan beberapa fungsi panggilan balik di dalamnya 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
};
Jika Anda ingin penggantian yang tepat dari FB.ensureInit maka Anda harus menulis sesuatu sendiri karena tidak ada pengganti resmi (kesalahan besar imo). Inilah yang saya gunakan:
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();
}
}
}
Pemakaian:
fbEnsureInit(function() {
console.log("this will be run once FB is initialized");
});