2012-05-02 8 views
53

genannt Ich baue facebook iframe app. Meine Anwendung wird einmal geladen (ich erhalte signed_request einmal) und dann navigiere ich durch die Seiten im iframe mit internen Domain-Links. Ich bemerkte, dass ich diese seltsamen Nachrichten sehen beide in Chrome und FirefoxFB.init wurde bereits

FB.init has already been called - this could indicate a problem 

ich ziemlich sicher bin, dass diese Methode nur einmal aufgerufen wird, und es scheint Facebook mir will es nennen einmal pro Anwendung Last (nicht einmal pro Seite) .

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

Welchen Fehler (wenn überhaupt) mache ich hier?

+0

ich den gleichen Fehler zu erhalten .. Ich habe einen Fehler auf facebook vorgelegt: https://developers.facebook.com/bugs/223004254480286 – Roni

+0

beachten Sie bitte Tinuo Antwort Kennzeichnung (http://stackoverflow.com/ a/10421328/910325) als akzeptiert, der Bug wurde behoben. – Roni

+0

Ich lief das Facebook Oauth Beispiel unter http://www.permadi.com/tutorial/facebook-js-oauth-popup-centered/index.html Auch das hat diesen Fehler in der Firefox-Konsole. Ich weiß nicht, was dieser Fehler ist, aber der An- und Abmeldeprozess funktioniert nahtlos. –

Antwort

158

Von dem Moment der Parameter an die js.src wie #xfbml=1&appId=X passieren, FB SDK wird automatisch init selbst und damit FB.init werden versuchen, reinit .. so in Sie R-Code, müssen Sie nicht die -Funktion entfernen, nur sicherstellen, dass Sie keine Parameter in den Code übergeben, der asynchron das JS SDK lädt.

diese ersetzen:

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

mit:

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

Hoffnung, das hilft.

+0

I * denke * das ist die richtige Antwort, kann jemand anderes dieses Problem bestätigen? – Igy

+5

Ich bestätige das löst die Fehlermeldung in der Konsole. – ino

+0

Tinou, ich denke, das ist der Fall. Kann ich auch reibungslose Anfragen stellen? – potomok

0

Ich hatte auch dieses Problem. Ich habe einfach FB.init({...}) Teil und es begann mit folgendem Code zu arbeiten:

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')); 

ich es inits Code nun automatisch erraten, so gibt es keine Notwendigkeit, sie manuell zu tun. Jetzt funktioniert mein Code wieder. Ich hoffe das hilft.

+0

nun, wie übermittelst du channelUrl und frikelessRequests = true? – potomok

+0

tue ich nicht und es ist kein Problem in meinem Fall, weil ich diesen Code vor Ort verwende. Es könnte jedoch problematisch mit Iframe-App sein. Vielleicht versuchen Sie einen weiteren Parameter nach "#" in js Pfad hinzuzufügen? (nur eine Idee, ich habe es nicht getestet). – pwkc

+0

ja, ich habe es getestet und es funktioniert für alle init Parameter – potomok

10

Wenn Sie wirklich init als mehr anrufen müssen, wenn Sie dies tun können:

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

aber es macht mir keinen Sinn, ich habe ein wenig anders Problem, aber es ist auch im Zusammenhang mit FB.init has already been called - this could indicate a problem Nachricht.

Ich habe AJAX-basierte Website, wo nach jeder Seite zu laden Ich brauche XFBML von HTML zu machen, dass ich von AJAX-Request erhalten (Kommentare, wie Button und andere):

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

Um dies zu tun, können Sie führen Sie dies, wenn Sie XFBML zu machen brauchen:

FB.XFBML.parse(); 
+0

Dmitrij, ich rufe init() nur einmal pro Seite, aber es sieht aus wie facebook möchte init() nur einmal pro iframe geladen werden oder es tut es automatisch als Pawel nimmt an. Wenn der erste Fall gültig ist, wäre es wirklich interessant, den Code zu sehen – potomok

Verwandte Themen