如何将所有facebook的JS功能完全加载到Connect网站上

时间:2010-07-19 17:57:18

标签: javascript facebook connect

好吧,在这里,我试图将一个网站与facebook连接整合,我被困在一些奇怪的地狱之环。

我已经看到了两种在fbc网站上初始化js的方法,我已经反复试过了两次,但是他们只完成了我需要完成的整个工作的两半。

<script src="http://connect.facebook.net/en_US/all.js"></script>
...
$(document).ready(function(){
   FB.init({'appId':'000',
       'cookie':true,
       'status':true,
   });
});

这是官方文档要说的,但是这并没有加载所有功能。 FB.Connect未定义,ensureInit没有做任何事情,我搞砸了。 我见过的其他代码是

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>
...
$(document).ready(function(){
   FB.init("000", "/xd_receiver.htm");
});

这开始看起来很棒,因为它加载了FB.Connect功能......但似乎这是它加载的唯一一组功能,因为FB.ui未定义,FB.getLoginStatus未定义且所有其他“核心职能”未定义......

尝试包含两个不同的js文件会导致奇怪的错误和一半初始化的会话,我不确定两种不同类型的FB.init调用之间的差异是什么......

谢谢!

3 个答案:

答案 0 :(得分:1)

您的第一个示例描述了最近推出的新API中的“新方法”(几个月前),而您的第二个示例是过去的旧API(现已弃用)。

现在加载FB js的最佳方法是:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({appId: 'your app id', status: true, cookie: true,
             xfbml: true});
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>

在加载js之前,这不会阻止页面加载。

遗憾的是,无论如何都无法从两个方面获得最佳效果,如果可能的话,你应该开始为新项目使用新的API,因为对旧项目的支持迟早会被删除。

您可以找到新的API文档here。来自旧API的90%的功能都被转移(通常以不同的名称),但实际上缺少一些旧的好东西,例如FB.ensureInit()。此外,现在还需要使用FQL一些旧的API功能。

答案 1 :(得分:1)

第一个例子是使用新的JS SDK,这绝对是你想要使用的。 FeatureLoader URL将为您提供较旧的SDK。它们无法在您发现的同时加载,因此只需使用新的最新版本即可。

答案 2 :(得分:0)

原来我很困惑,这两个文件和函数调用适用于js lib的2个不同版本...所以当我使用新版本时,我不应该期望FB.Connect被定义,当我使用老版本我不应该期望定义FB.ui ...

如果文档更加清晰并且链接腐烂少了很多,我本可以节省一天的时间。

干杯!