Cập nhật vào ngày 04/01/2012
Có vẻ như bạn không thể chỉ gọi các phương thức phụ thuộc FB (ví dụ FB.getAuthResponse()
) ngay sau đó FB.init()
như trước đây, vì FB.init()
có vẻ như bây giờ là không đồng bộ. Gói mã của bạn vào FB.getLoginStatus()
phản hồi dường như thực hiện mẹo phát hiện khi nào API đã hoàn toàn sẵn sàng:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
hoặc nếu sử dụng fbEnsureInit()
triển khai từ bên dưới:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
Bài gốc:
Nếu bạn chỉ muốn chạy một số tập lệnh khi FB được khởi tạo, bạn có thể đặt một số hàm gọi lại bên trong 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
};
Nếu bạn muốn thay thế chính xác FB.ensureInit thì bạn sẽ phải tự viết một cái gì đó vì không có sự thay thế chính thức (sai lầm lớn imo). Đây là những gì tôi sử dụng:
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();
}
}
}
Sử dụng:
fbEnsureInit(function() {
console.log("this will be run once FB is initialized");
});