04 जनवरी 2012 को अद्यतन
ऐसा लगता है कि आप पहले की तरह ही एफबी-निर्भर तरीकों (उदाहरण के लिए FB.getAuthResponse()) को ठीक से कॉल नहीं कर सकते FB.init(), जैसा कि FB.init()अब अतुल्यकालिक लगता है। आपके कोड को FB.getLoginStatus()प्रतिक्रिया में लपेटकर लगता है कि एपीआई पूरी तरह से तैयार होने पर पता लगाने की चाल है:
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");
});