2012-05-02 26 views
53

कहा गया है, मैं फेसबुक iframe ऐप बना रहा हूं। मेरा आवेदन एक बार लोड हो जाता है (मुझे एक बार साइन_रेक्वेस्ट प्राप्त होता है) और फिर मैं आंतरिक डोमेन लिंक का उपयोग कर आईफ्रेम में पृष्ठों के माध्यम से नेविगेट करता हूं। मैंने देखा है कि मैं Chrome और FirefoxFB.init को पहले से ही

में दोनों ये अजीब संदेशों
FB.init has already been called - this could indicate a problem 

मैं बहुत यकीन है कि इस विधि केवल एक बार कहा जाता है कर रहा हूँ देख सकते हैं और यह फेसबुक मुझे आवेदन लोड प्रति एक बार यह कॉल करने के लिए चाहता है लगता है (नहीं एक बार प्रति पृष्ठ) ।

window.fbAsyncInit = function() { 
    FB.init({ 
    appId: param('facebook_app_id'), 
    frictionlessRequests: true, 
    oauth: true, 
    channelUrl: site_url('/channel.html') 
    }) 
} 

क्या त्रुटि (यदि हो तो) मैं यहाँ बनाने रहा हूँ?

+0

मुझे एक ही त्रुटि मिल रही है .. मैंने फेसबुक पर एक बग सबमिट किया है: https://developers.facebook.com/bugs/223004254480286 – Roni

+0

कृपया टिनुओ के उत्तर को चिह्नित करने पर विचार करें (http://stackoverflow.com/ ए/10421328/910325) स्वीकृत के रूप में, बग बीटीडब्ल्यू तय किया गया था। – Roni

+0

मैंने फेसबुक ओएथ उदाहरण http://www.permadi.com/tutorial/facebook-js-oauth-popup-centered/index.html पर चलाया है, यहां तक ​​कि यह बग फ़ायरफ़ॉक्स कंसोल में भी है। यह बग नहीं है कि यह बग क्या है, लेकिन लॉगिन और लॉगआउट प्रक्रिया निर्बाध रूप से काम करती है। –

उत्तर

158

पल आप js.src#xfbml=1&appId=X की तरह करने के लिए पैरामीटर भेजने से, अमेरिकन प्लान एसडीके ही init ऑटो और इस तरह FB.init reinit को .. आप में तो कोशिश करेंगे आर कोड, आपको FB.init फ़ंक्शन को हटाने की आवश्यकता नहीं है, बस सुनिश्चित करें कि आप कोड में पैरामीटर पास नहीं करते हैं जो असीमित रूप से जेएस एसडीके लोड करता है।

इस बदलें:

js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=X"; 

के साथ:

js.src = "//connect.facebook.net/en_US/sdk.js"; 

आशा इस मदद करता है।

+0

मुझे लगता है कि वास्तव में यह सचमुच inteesting होगा * लगता है * यह सही जवाब है, क्या कोई और इस समस्या की पुष्टि कर सकता है? – Igy

+5

मैं पुष्टि करता हूं कि यह कंसोल में त्रुटि संदेश हल करता है। – ino

+0

टिनौ, मुझे लगता है कि यह मामला है। क्या मैं घर्षण रहित अनुरोध भी पास कर सकता हूं? – potomok

0

मुझे यह समस्या भी मिली है। मैं बस FB.init({...}) हिस्सा निकाल दिया और यह निम्न कोड के साथ काम शुरू कर दिया:

window.fbAsyncInit = function() { 
    FB.Event.subscribe('auth.logout', function() { 
     // subscribe parts 
    }); 

    // here is where fb.init() code was 
}; 
(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=X"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk')); 

मैं अब यह लगता है कि कोड inits ऑटो, तो यह मैन्युअल रूप से ऐसा करने के लिए कोई जरूरत नहीं है। अब मेरा कोड फिर से काम करता है। आशा है कि ये आपकी मदद करेगा।

+0

अच्छी तरह से, आप channelUrl और frictionlessRequests = true कैसे पास करते हैं? – potomok

+0

मैं नहीं करता और यह मेरे मामले में कोई मुद्दा नहीं है, क्योंकि मैं साइट पर इस कोड का उपयोग करता हूं। हालांकि यह iframe ऐप के साथ समस्याग्रस्त हो सकता है। शायद जेएस पथ में "#" के बाद एक और पैरामीटर जोड़ने का प्रयास करें? (सिर्फ एक विचार है, मैंने इसका परीक्षण नहीं किया है)। – pwkc

+0

हां, मैंने इसका परीक्षण किया और यह सभी इनिट पैरामीटर – potomok

10

तुम सच में से एक बार आप यह कर सकते हैं और अधिक init कॉल करने के लिए की जरूरत है:

FB._initialized = false; 
FB.init(); 

लेकिन यह मेरे लिए कोई मतलब नहीं है, मैं थोड़ा अलग समस्या है, लेकिन यह भी से संबंधित है FB.init has already been called - this could indicate a problem संदेश।

मैं AJAX आधारित वेबसाइट है जहां प्रत्येक पृष्ठ लोड होने के बाद मैं HTML से XFBML रेंडर करने के लिए है कि मैं AJAX अनुरोध (टिप्पणी, बटन और अन्य की तरह) से प्राप्त की जरूरत है:

<div class="fb-comments" data-href="{REMOVED}" data-num-posts="5" data-width="760" colorscheme="dark"></div> 

ऐसा करने के लिए, आप कर सकते हैं इस चलाने के लिए जब आप XFBML रेंडर करने के लिए की जरूरत है:

FB.XFBML.parse(); 
+0

दिमित्री के लिए काम करता है, मैं प्रति पृष्ठ केवल एक बार init() को कॉल करता हूं, हालांकि ऐसा लगता है कि फेसबुक इनिट्रेम लोड के लिए केवल एक बार कॉल किया जाता है या यह स्वचालित रूप से इसे करता है Pawel मानता है। यदि पहला मामला वैध है तो कोड – potomok

संबंधित मुद्दे