wake-up-neo.net

FB.init wurde bereits aufgerufen

Ich baue Facebook-Iframe-App. Meine Anwendung wird einmal geladen (ich erhalte ein Mal signierte_Anfrage) und navigiere dann mithilfe der internen Domain-Links durch die Seiten im iframe. Mir ist aufgefallen, dass ich diese seltsamen Nachrichten sowohl in Chrome als auch in Firefox sehe

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

Ich bin mir ziemlich sicher, dass diese Methode nur einmal aufgerufen wird und es scheint, als würde Facebook von mir verlangen, dass ich sie einmal pro Anwendungsladung anrufe (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 mache ich hier?

53
potomok

Sobald Sie Parameter an js.src übergeben haben, z. B. #xfbml=1&appId=X, wird das FB SDK automatisch selbst initialisiert. FB.init versucht dann, es erneut zu definieren .. In Ihrem Code müssen Sie die FB.init-Funktion nicht entfernen Übergeben Sie keine Parameter im Code, der das JS-SDK asynchron lädt.

Ersetzen Sie dies:

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

Mit:

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

Hoffe das hilft.

157
Tinou

Wenn Sie init wirklich mehr als einmal aufrufen müssen, können Sie Folgendes tun:

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

aber es macht für mich keinen Sinn, ich habe ein etwas anderes Problem, aber es hängt auch mit FB.init has already been called - this could indicate a problem message zusammen.

Ich habe eine AJAX-basierte Website, bei der ich nach jedem Laden der Seite XFBML aus HTML-Daten rendern muss, die ich von der AJAX -Anforderung bekomme (Kommentare wie Schaltfläche und andere):

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

Dazu können Sie dies ausführen, wenn Sie XFBML rendern müssen: 

FB.XFBML.parse();
10

Ich hatte auch dieses Problem. Ich habe einfach FB.init({...}) part entfernt 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 vermute, es ist jetzt automatisch in Code, so dass es nicht nötig ist, es manuell zu machen. Nun funktioniert mein Code wieder. Ich hoffe das hilft.

0
pwkc