53

Facebookのiframeアプリを作成しています。アプリケーションが1回ロードされ(signed_requestを1回受信)、内部ドメインリンクを使用してiframe内のページをナビゲートします。ChromeとFirefoxの両方でこれらの奇妙なメッセージが表示されることに気づきました

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

このメソッドは1回だけ呼び出されると確信しており、Facebookは、アプリケーションのロードごとに1回(ページごとに1回ではなく)呼び出すように求めているようです。

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

ここでどのようなエラーが発生していますか?

4

3 に答える 3

157

js.srcパラメータをなどに渡した瞬間から#xfbml=1&appId=X、FB SDKは自動的に初期化するため、再初期FB.init化を試みます。したがって、コードでは、FB.init関数を削除する必要はありません。パラメータを渡さないように注意してください。 JSSDKを非同期でロードするコード。

これを置き換えます:

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

と :

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

お役に立てれば。

于 2012-05-02T20:38:40.513 に答える
10

本当にinitを複数回呼び出す必要がある場合は、次のように実行できます。

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

でも私には意味がありません。少し違う問題がありますが、それはFB.init has already been called - this could indicate a problemメッセージにも関係しています。

私はAJAXベースのWebサイトを持っており、各ページのロード後に、AJAXリクエストから取得したHTMLからXFBMLをレンダリングする必要があります(ボタンなどのコメント):

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

これを行うには、XFBMLをレンダリングする必要があるときにこれを実行できます。

FB.XFBML.parse();
于 2012-05-02T19:38:55.700 に答える
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'));

コードを自動初期化するようになったので、手動で行う必要はありません。これで、私のコードは再び機能します。これがお役に立てば幸いです。

于 2012-05-02T19:13:09.430 に答える