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;
});

这不会(返回“未捕获的 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?电话在同一个地方。

4

1 回答 1

1

开头的那个大脚本块的全部意义在于window.fbAsyncInitFacebook SDK 是异步加载的。

即使您在FBjQuery 文档就绪回调中进行了调用,也不足以确保在执行该代码时加载 SDK。

幸运的是,它window.fbAsyncInit的存在正是为了这个目的:在 SDK 加载之前它不会运行。

来自Facebook 的文档

window.fbAsyncInit加载 SDK 后立即运行分配给的函数。您希望在 SDK 加载后运行的任何代码都应放置在此函数中并在调用 FB.init 之后。例如,您可以在此处测试用户的登录状态或订阅您的应用程序感兴趣的任何 Facebook 事件。

只需将您$("a.scrollLink").each(function()移到 fbAsynchInit 函数中,一切都会很高兴。

于 2012-01-06T23:17:44.823 回答