52 votes

FB.init a déjà été appelé

Je suis bâtiment facebook iframe app. Mon application est chargée qu'une seule fois (je reçois signed_request une fois) et puis j'ai naviguer à travers les pages dans l'iframe à l'aide de domaine interne des liens. J'ai remarqué que je vois ces messages étranges à la fois dans Chrome et Firefox

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

Je suis assez sûr que cette méthode n'est appelée qu'une seule fois et il semble que Facebook veut m'appeler une fois par application de la charge (pas une seule fois par page).

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

Quelle est l'erreur (le cas échéant) suis-je à faire ici?

156voto

Tinou Points 2127

À partir du moment où vous passez des paramètres de l' js.src comme #xfbml=1&appId=X, FB SDK auto init lui-même et, ainsi, FB.init va essayer de réinitialiser la liste.. Donc, dans votre code, vous n'avez pas à supprimer l' FB.init fonction, assurez-vous de ne pas passer des paramètres dans le code de chargement asynchrone de la JS SDK.

Remplacer ce:

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

Avec :

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

Espérons que cette aide.

10voto

Si vous avez vraiment besoin d'appeler init plus d'une fois, vous pouvez faire ceci:

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

mais il ne fait pas de sens pour moi, j'ai un peu le problème est différent, mais c'est aussi lié à l' FB.init has already been called - this could indicate a problem message.

J'ai AJAX-site web où après chaque chargement de la page j'ai besoin de rendre XFBML de HTML que je l'obtenir à partir d'une requête AJAX (commentaires, comme le bouton et les autres):

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

Pour ce faire, vous pouvez exécuter ce lorsque vous avez besoin de rendre XFBML:

FB.XFBML.parse();

0voto

J'ai aussi eu ce problème. J'ai simplement supprimé la partie FB.init({...}) et elle a commencé à fonctionner avec le code suivant:

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

Je suppose que cela entre maintenant automatiquement dans le code, il n’est donc pas nécessaire de le faire manuellement. Maintenant, mon code fonctionne à nouveau. J'espère que ça aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X