1

FBのjavascriptSDKを非同期で読み込もうとしています。これらの指示に従ってください:

http://developers.facebook.com/docs/reference/javascript/

ただし、次のコードが/ Assets / js / some-fileで実行される場合、「FB」は未定義です。

$(window).load ->
  setFbSize()

setFbSize = ->
  FB.Canvas.setSize # This triggers the error
    ...

同期ロードは正常に機能します。application.html.hamlに以下をロードすると、動作させることができます。

%script{:src => "http://connect.facebook.net/en_US/all.js"}

...そしてこれを私のindex.html.hamlに含めます:

:javascript

    FB.init({
        appId:'#{CONFIG['app_id']}', cookie:true,
        status:true, xfbml:true
    });

非同期ロードを機能させるにはどうすればよいですか?実際にはロードされていると思いますが(synch / asynchソリューションを組み合わせると、FB.initが2回実行されたことがわかります)、/assets/js/some-file.coffeeのコードが実行された後にロードされます。そのコードを実行する前にFBがロードされたことを確認するにはどうすればよいですか(それが問題である場合)。

4

1 に答える 1

0

ウィンドウのロードイベント発行時にFB SDKが完全にロードされていない可能性があります。FB オブジェクトにアクセスするコードは、window.fbAsyncInit に登録された関数で実行する必要があります。ドキュメントには次のように記載されています。

window.fbAsyncInit に割り当てられた関数は、SDK が読み込まれるとすぐに実行されます。SDK のロード後に実行するコードは、この関数内で FB.init の呼び出しの後に配置する必要があります。

于 2012-05-15T10:31:05.653 に答える