2010-07-19 21 views
2

好吧,我在这里试图将一个网站与facebook连接起来,并且我陷入了一些奇怪的地狱之环。如何将Facebook上所有的JS功能全部加载到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调用之间的区别是...

谢谢!

回答

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()实际上缺失。还有一些旧的API功能现在需要使用FQL

+0

非常感谢您的回复,我现在已经开始行动了,恢复了生产力! – Paco 2010-07-19 19:31:11

0

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

我本来可以保存一天的时间,如果文档更清晰,并且有更少的链接腐烂。

干杯!

1

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

相关问题