2

さて、ここで私はウェブサイトを Facebook Connect と統合しようとしていますが、奇妙な地獄の輪に閉じ込められています。

fbcサイトでjsを初期化する2つの方法を見てきました。両方を繰り返し試しましたが、必要な作業全体の反対側の半分しか実行しません。

<script src="http://connect.facebook.net/en_US/all.js"></script>
...
$(document).ready(function(){
   FB.init({'appId':'000',
       'cookie':true,
       'status':true,
   });
});

これは公式ドキュメントに記載されていることですが、これはすべての機能をロードするわけではありません。FB.Connect は未定義です。ensureInit は何もしません。私はうんざりしています。私が見た他のコードは

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>
...
$(document).ready(function(){
   FB.init("000", "/xd_receiver.htm");
});

FB.Connect 機能をロードするため、これは最初は素晴らしいように見えますが、FB.ui が未定義であり、FB.getLoginStatus が未定義であり、他のすべての「コア関数」は定義されていません...

異なる js ファイルの両方を含めようとすると、奇妙なエラーが発生し、セッションが半分初期化されます。2 つの異なるタイプの FB.init 呼び出しの違いが何であるかはわかりません...

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

4

3 に答える 3

1

最初の例は、最近導入された新しい API (数か月前) で物事を行う「新しい方法」を説明していますが、2 番目の例は古い API が以前 (現在は非推奨) であったものです。

FB js をロードする最良の方法は次のとおりです。

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({appId: 'your app id', status: true, cookie: true,
             xfbml: true});
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>

jsがロードされるまでページのロードを妨げません。

残念ながら、両方の世界から最善を尽くす方法はありません。古いプロジェクトのサポートは遅かれ早かれ廃止されるため、可能であれば新しいプロジェクトに新しい API を使用するようにしてください。

ここで新しい API ドキュメントを見つけることができます。古い API の機能の 90% は引き継がれましたが (多くの場合、別の名前で)、 などの古い機能FB.ensureInit()が実際には失われています。また、一部の古い API 機能ではFQLを使用する必要があります。

于 2010-07-19T19:28:00.557 に答える
1

最初の例は、新しいJS SDKを使用しています。これは、最も確実に使用したいものです。FeatureLoader URL は古い SDK を提供します。発見と同時にロードすることはできないため、最新かつ最高のものには新しいものを使用してください。

于 2010-07-19T19:42:09.947 に答える
0

これらの 2 つのファイルと関数呼び出しは js lib の 2 つの異なるバージョンに適用されます。したがって、新しいバージョンを使用する場合、FB.Connect が定義されているとは思わないでください。古いバージョンを使用する場合は、 FB.ui が定義されているとは思わないでください...

ドキュメントがより明確で、リンクの腐敗がはるかに少なければ、1 日の時間を節約できたはずです。

乾杯!

于 2010-07-19T19:29:19.483 に答える