在jQuery函数中使用Facebook“FB.Canvas.getPageInfo”

时间:2012-01-06 23:04:52

标签: jquery facebook facebook-javascript-sdk facebook-canvas

我无法让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未定义'):

$("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未定义?电话在同一个地方。

1 个答案:

答案 0 :(得分:1)

window.fbAsyncInit开头的大脚本块的重点是Facebook SDK以异步方式加载

即使您在jQuery文档就绪回调中对FB进行了调用,但这还不足以确保在执行该代码时加载SDK。

幸运的是,完全存在window.fbAsyncInit目的:在SDK加载之前它不会运行。

来自Facebook's docs

  

分配给window.fbAsyncInit的功能在SDK完成后立即运行   已加载。加载SDK后要运行的任何代码   应该放在这个函数中并在调用FB.init之后。   例如,您可以在此处测试其登录状态   用户或订阅您的应用程序所在的任何Facebook活动   感兴趣。

只需将$("a.scrollLink").each(function()移动到fbAsynchInit函数中,所有人都应该感到高兴。