อัปเดตเมื่อ 04 ม.ค. 2555
ดูเหมือนว่าคุณจะไม่สามารถเรียกใช้เมธอดที่ขึ้นกับ FB (เช่นFB.getAuthResponse()
) ได้ทันทีFB.init()
เหมือนก่อนหน้านี้ซึ่งFB.init()
ดูเหมือนว่าจะเป็นแบบอะซิงโครนัสในขณะนี้ การห่อรหัสของคุณเป็นการFB.getLoginStatus()
ตอบสนองดูเหมือนจะเป็นเคล็ดลับในการตรวจจับเมื่อ API พร้อมใช้งานอย่างสมบูรณ์:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
หรือหากใช้fbEnsureInit()
การใช้งานจากด้านล่าง:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
โพสต์ต้นฉบับ:
หากคุณต้องการเรียกใช้สคริปต์บางส่วนเมื่อเริ่มต้น FB คุณสามารถใส่ฟังก์ชันการโทรกลับภายใน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
};
หากคุณต้องการแทนที่ FB.ensureInit อย่างแน่นอนคุณจะต้องเขียนบางสิ่งด้วยตัวคุณเองเนื่องจากไม่มีการแทนที่อย่างเป็นทางการ (imo ผิดพลาดครั้งใหญ่) นี่คือสิ่งที่ฉันใช้:
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();
}
}
}
การใช้งาน:
fbEnsureInit(function() {
console.log("this will be run once FB is initialized");
});