我试图拉出用户墙上的所有帖子。我有一个连接到FB的运行示例,但是当我尝试使用FB.api获取用户名(我肯定已成功连接)时,我得到FB.api is not a function
。有些搜索发现this表示我使用了错误的API链接,但是当我尝试new one(似乎使用相同的方法连接)时,所有firebug NET面板都表示它已成功加载,没有错误。 。 。什么都没发生。
以下是代码(将http://connect.facebook.net/en_US/all.js链接替换为http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php,以便代码在我提到的错误之前进行处理):
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<script src="http://connect.facebook.net/en_US/all.js" type="text/javascript"></script>
<script type="text/javascript">
function grab(){
FB.api('/me', function(response) {
alert(response.name);
});
}
function update_user_box() {
var user_box = document.getElementById("user");
user_box.innerHTML =
"<div>"
+ "<fb:profile-pic uid='loggedinuser' facebook-logo='true'></fb:profile-pic>"
+ " Welcome, <fb:name uid='loggedinuser' useyou='false'></fb:name>"
+ "</div>"
+ "<a href=\"javascript:grab()\">try me</a>";
FB.XFBML.Host.parseDomTree();
}
</script>
</head>
<body>
<div id='user'><fb:login-button onlogin="update_user_box();"></fb:login-button></div>
<br><br>
<div id="fb-root"></div>
<script type="text/javascript">
FB.init("b07e858317c9069d450023b7500b4511", "xd_receiver.htm", {"ifUserConnected": update_user_box});
</script>
</body>
</html>
感谢任何和所有帮助!
答案 0 :(得分:3)
您正在使用来自两个不同SDK的方法。 FB.api
是new SDK(all.js)的一部分,FB.XFBML.Host.parseDomTree()
是old SDK(功能加载器)的一部分。例如,要使用新SDK解析dom树,请调用FB.XFBML.parse()
。我建议您选择两个SDK中的一个,最好是新SDK,如果您刚刚开始使用,那么旧的SDK已被弃用。
答案 1 :(得分:1)
我猜你没有正确地进行初始化。我有类似的问题......我不清楚哪个是oAuth2.0和哪个FB-Connect。这看起来很混乱。我按照下面的例子,它对我有用。见here
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
</script>
希望这有帮助。
另外,您可能需要扩展权限才能访问publish_stream,read_stream。你应该参考here
答案 2 :(得分:0)
Typeoneerror是对的,你正在混合SDK。
以下是我正在初始化较新的JS SDK,使用event.subscribe来确保SDK已初始化并且用户已经在JS端进行了身份验证,然后再继续使用任何API调用或让我的游戏尝试加载等。
<div id="fb-root"> </div>
<script>
window.fbAsyncInit = function() {
FB.init({appId: 'YOUR_APP_ID', status: true, cookie: true, xfbml: true});
FB.Canvas.setSize({ width: 760, height: 1000 }); // use this to increase canvas height
FB.Event.subscribe('auth.login', function(response) {
// You can call your function that requires FB.whatever here...
});
};
(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>
我也在使用PHP SDK来执行初始身份验证...如果用户未进行身份验证,我会将JS重定向回显到我们的登录URL(可从PHP SDK方法getLoginUrl获得)。希望有所帮助。