Facebook iframeアプリを作成しています。アプリケーションが1回読み込まれ(signed_requestを1回受け取る)、内部ドメインリンクを使用してiframe内のページをナビゲートします。これらの奇妙なメッセージがChromeとFirefox
FB.init has already been called - this could indicate a problem
このメソッドは一度だけ呼び出され、Facebookはアプリケーションのロードごとに(ページごとに一度ではなく)一度呼び出すように望んでいるようです。
window.fbAsyncInit = function() {
FB.init({
appId: param('facebook_app_id'),
frictionlessRequests: true,
oauth: true,
channelUrl: site_url('/channel.html')
})
}
ここでどのようなエラーが発生していますか?
js.src
のような#xfbml=1&appId=X
にパラメーターを渡すと、FB SDKは自動的に初期化されるため、FB.init
は再初期化を試みます。したがって、コードでは、 FB.init
関数を削除し、JS SDKを非同期にロードするコードでパラメーターを渡さないようにしてください。
これを置き換えます:
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&appId=X";
で:
js.src = "//connect.facebook.net/en_US/sdk.js";
お役に立てれば。
本当に複数回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();
私もこの問題を抱えています。私は単に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'));
コードは自動的に初期化されるので、手動で行う必要はありません。今、私のコードは再び機能します。これがお役に立てば幸いです。