好吧,在这里,我试图将一个网站与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调用之间的差异是什么......
谢谢!
答案 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 ...
如果文档更加清晰并且链接腐烂少了很多,我本可以节省一天的时间。
干杯!