0

Facebook Javascript 関数を特定の jQuery コマンド内で動作させることができません...

これは機能します:

$("a#GetScrollTest").click( function() {
    FB.Canvas.getPageInfo(function(fbCanvasInfoObject) {
        var fbPosition = fbCanvasInfoObject.scrollTop;
        $("a#GetScrollTest").html("The scroll top value 
         is " + fbPosition + "px");
    });
    return false;
});

これはしません (「Uncaught ReferenceError: FB is not defined」を返します):

$("a.scrollLink").each(function() {
    $(this).click(function(){
        FB.Canvas.getPageInfo(function(fbCanvasInfoObject) {
        var fbPosition = fbCanvasInfoObject.scrollTop;
        $(this).html("The scroll top value is " + fbPosition + "px");
        });
        return false;
    });
});

click メソッドが機能するのに .each() メソッドが機能しない理由を知っている人はいますか? 定義されていない FB が返されるのはなぜですか? 呼び出しは同じ場所にあります。

4

1 に答える 1

1

この大きなスクリプト ブロックの要点はwindow.fbAsyncInit、Facebook SDK が非同期的に読み込まれることです。

jQuery ドキュメント対応のコールバック内で呼び出しを行ったとしてもFB、そのコードが実行されたときに SDK が確実に読み込まれるには十分ではありません。

幸いなことに、これはまさにwindow.fbAsyncInitその目的のために存在します。SDK が読み込まれるまで実行されません。

Facebookのドキュメントから:

に割り当てられた関数window.fbAsyncInitは、SDK が読み込まれるとすぐに実行されます。SDK のロード後に実行するコードは、この関数内で FB.init の呼び出しの後に配置する必要があります。たとえば、ここでユーザーのログイン状態をテストしたり、アプリケーションが関心のある Facebook イベントをサブスクライブしたりします。

fbAsynchInit 関数に移動するだけ$("a.scrollLink").each(function()で、すべてが満足するはずです。

于 2012-01-06T23:17:44.823 に答える