1

我正在尝试异步加载 FB 的 javascript SDK。遵循以下说明:

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

我怎样才能让异步加载工作?我认为它实际上可能正在加载(因为当我结合同步/异步解决方案时,它告诉我 FB.init 已执行两次),但在 /assets/js/some-file.coffee 中的代码执行后加载。在运行该代码之前如何验证 FB 是否已加载(如果这是问题所在?)

4

1 回答 1

0

发出窗口的加载事件时,FB SDK 可能尚未完全加载。任何将访问 FB 对象的代码都应在注册到 window.fbAsyncInit 的函数中执行。文件说:

加载 SDK 后立即运行分配给 window.fbAsyncInit 的函数。您希望在 SDK 加载后运行的任何代码都应放置在此函数中并在调用 FB.init 之后。

于 2012-05-15T10:31:05.653 回答