2

好吧,在这里,我正在尝试将网站与 facebook connect 集成,但我被困在了一些奇怪的地狱之环中。

我在 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 文件会导致奇怪的错误和半初始化会话,我不确定 2 种不同类型的 FB.init 调用之间的区别是什么......

谢谢!

4

3 回答 3

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 的支持迟早会被放弃。

您可以在此处找到新的 API 文档。旧 API 中 90% 的功能被继承(通常使用不同的名称),但FB.ensureInit()实际上缺少一些旧的好东西。现在还需要使用FQL一些旧的 API 功能。

于 2010-07-19T19:28:00.557 回答
1

第一个示例是使用新的JS SDK,这绝对是您想要使用的。FeatureLoader URL 将为您提供较旧的 SDK。它们不能在您发现的同时加载,所以只需使用新的来获取最新和最好的。

于 2010-07-19T19:42:09.947 回答
0

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

如果文档更清晰并且链接失效更少,我本可以节省一天的时间。

干杯!

于 2010-07-19T19:29:19.483 回答