Aktualisierung am 04. Jan. 2012
Es scheint, dass man nicht einfach FB-abhängige Methoden aufrufen kann (zum Beispiel FB.getAuthResponse()
) gleich nach FB.init()
wie früher, als FB.init()
scheint jetzt asynchron zu sein. Das Einbinden Ihres Codes in FB.getLoginStatus()
Antwort scheint den Trick zu tun, um zu erkennen, wann die API vollständig bereit ist:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
runFbInitCriticalCode();
});
};
oder bei Verwendung von fbEnsureInit()
Umsetzung von unten:
window.fbAsyncInit = function() {
FB.init({
//...
});
FB.getLoginStatus(function(response){
fbApiInit = true;
});
};
Ursprünglicher Beitrag:
Wenn Sie nur ein Skript ausführen wollen, wenn FB initialisiert wird, können Sie eine Callback-Funktion in 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
};
Wenn Sie einen exakten Ersatz für FB.ensureInit wollen, müssen Sie selbst etwas schreiben, da es keinen offiziellen Ersatz gibt (großer Fehler imo). Hier ist, was ich verwende:
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();
}
}
}
Verwendung:
fbEnsureInit(function() {
console.log("this will be run once FB is initialized");
});