2012-05-02 13 views
53

私はFacebookのiframeアプリケーションをビルドしています。私のアプリケーションは一度読み込まれ(一度signed_requestを受け取る)、内部ドメインリンクを使用してiframe内のページをナビゲートします。私は(ない1ページあたり1回)私は FB.initは既に呼び出されています

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

が、私はこの方法では、一度だけ呼び出されることをかなり確信しているChromeとFirefoxの

の両方でこれらの奇妙なメッセージを見て、Facebookがアプリケーションの負荷ごとに一度、それを呼び出すために私を望んでいるようだということに気づきました。

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

私はここで何をしていますか?

+0

私はFacebookにバグを提出しました: https://developers.facebook.com/bugs/223004254480286 – Roni

+0

Tinuoの答えをマークすることを検討してください(http://stackoverflow.com/ a/10421328/910325)、バグが修正されました。 – Roni

+0

私はFacebookのOauthの例をhttp://www.permadi.com/tutorial/facebook-js-oauth-popupcentrated/index.htmlで実行しました。これでもFirefoxのコンソールにこのバグがあります。このバグが何であるかは分かりませんが、ログインとログアウトのプロセスはシームレスに機能します。 –

答えて

158

を、FB SDKは、それ自体のinit自動ので、FB.initあなたに..だから を再初期化しようとしますrコードの場合、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"; 

は、この情報がお役に立てば幸いです。

+0

を見るのが面白いでしょう*これは正しい答えだと思いますが、この問題を抱えている誰かが確認できますか? – Igy

+5

これは、コンソールでエラーメッセージが解決されることを確認します。 – ino

+0

ティノウ、そうだと思います。私はまた、摩擦のないリクエストを渡すことができますか? – potomok

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

私は今、コードのINIT自動それを推測し、手動でそれを行う必要はありません。今度は私のコードが再び動作します。私はこれが役立つことを願っています

+0

まあ、どのようにchannelUrlとfrictionlessRequests = trueを渡しますか? – potomok

+0

私はサイト上でこのコードを使用しているので、私の場合は問題ではありません。ただし、iframeアプリで問題が発生する可能性があります。他のパラメータを "#"の後に追加してみてください。 (ただのアイデア、私はそれをテストしていない)。 – pwkc

+0

はい、私はそれをテストし、それはすべての初期パラメータのために動作します – potomok

10

あなたは本当にあなたがこれを行うことができ、複数回のinitを呼び出す必要がある場合:

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

が、それは私には意味がありません、私は少し異なる問題を抱えているが、それはまたに関係していますFB.init has already been called - this could indicate a problemメッセージ。

私は、各ページのロード後に私はAJAXリクエスト(ボタンやその他のようなコメントが、)から入手HTMLからXFBMLをレンダリングする必要がAJAXベースのウェブサイトがありますすることができます、これを行うには

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

をあなたはXFBMLレンダリングする必要がある場合にこれを実行します。あなたは#xfbml=1&appId=Xのようなjs.srcにパラメータを渡す瞬間から

FB.XFBML.parse(); 
+0

Dmitrij、私はinit()がiframeのロードごとに一度だけ呼び出されるようにfacebookのように見えるようにinit()を呼び出します。 Pawelは仮定する。最初のケースが有効であれば、実際にはコード – potomok

関連する問題