1

SDKのないFacebookボタンがあります:

<fb:like href="<%= @canonical_url %>" send="" layout="button_count"></fb:like>
     <div id="fb-root"> </div>
     <script>
      // facebook recommend button
      window.fbAsyncInit = function() {
         FB.init({appId: 'myappid', status: true, cookie: true, xfbml: true});
      };
      (function() {
        // delay to simulate slow loading of Facebook library - remove this setTimeout!!
        var t = setTimeout(function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol + '//connect.facebook.net/<%= locale_og_tag %>/all.js';
            document.getElementById('fb-root').appendChild(e);
        }, 0);
      }());
      </script>
  </div>

ページを変更するときにFacebookボタンをリロードせず、JavaScriptファイル内で実行します:

if (typeof (FB) != 'undefined') {
    FB.init({ status: true, cookie: true, xfbml: true });
   } else {
    $.getScript("http://connect.facebook.net/en_US/all.js#xfbml=1", function () {
     FB.init({ status: true, cookie: true, xfbml: true });
   });
 }

しかし、私はコンソールに入ります:

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

この問題を解決するにはどうすればよいですか?

ありがとうございました!

4

5 に答える 5

15

init への 3 つの呼び出しがありFB.initます../all.js#xfbml=1#xfbml=1パーツと s のいずれかを削除するFB.initと、問題が解決するはずです。

于 2012-12-19T19:17:12.830 に答える
2

さて、あなた2回電話FB.init()しています...そのエラーメッセージのアドバイスに耳を傾けたいかもしれません:P

呼び出す必要があるのは 1 回だけで、SDK を読み込まないと呼び出すことができないため、SDK が必要です。を呼び出して、 初期化中 にレンダリングするかどうかFB.init()などのパラメータを設定します...app_idxfbml

于 2012-12-19T19:07:45.117 に答える
1

すでに window.fbAsyncInit で FB.init を呼び出しており、最初のコード ブロックで FB スクリプトを既に読み込んでいます。

これは、2 番目のコード ブロックを削除する必要があることを意味します。

于 2012-12-19T18:58:29.997 に答える
0

ログインフォームを他のページと分離するだけです。したがって、FB.init() を何度もロードする必要はありません。

于 2015-05-10T05:13:27.267 に答える
0

おそらく、私のように、タイトルのような問題を抱えていて、解決策を見つけられなかった他の人に役立つでしょう。

Facebook のドキュメンテーションは誤解を招くものであり、次の例を示しています。

      <script crossorigin="anonymous" src="https://connect.facebook.net/pl_PL/sdk/debug.js#xfbml=1&version=v7.0&appId={あなたのアプリID}&autoLogAppEvents=1"></script>

      <スクリプト>
      window.fbAsyncInit = function() {
         FB.init({
            appId : '{アプリ ID}',
            クッキー:真、
            xfbml : 真、
            バージョン: 'v7.0'
         });

         FB.AppEvents.logPageView();   

         FB.getLoginStatus(関数(応答) {
            console.log(応答);
         });

      };

      </script>


しかし、FacebookスクリプトのURLでは、すでにFBオブジェクトを初期化しているため(アプリIDを指定)、間違っています。

そのため、次の方法を選択する必要があります。

  • または、アプリIDを指定せずにfacebookスクリプトを含めてから、明らかにCALL FB.init(..)
  • またはFacebookスクリプトWITHアプリIDを含めてから、FB.init(...)の呼び出しをOMITします
于 2020-06-05T12:50:03.500 に答える