Javascript FB.Event.subscribe不工作
我正在一个网站上工作,希望给我的用户一个使用facebook登录的选项。Javascript FB.Event.subscribe不工作,javascript,html,facebook-graph-api,facebook-javascript-sdk,Javascript,Html,Facebook Graph Api,Facebook Javascript Sdk,我正在一个网站上工作,希望给我的用户一个使用facebook登录的选项。 我成功登录,但事件对我不起作用。 每当我登录时,都没有调用函数“login”……我尝试将此登录函数分配给其他按钮以手动检查,警报起作用,但没有得到任何响应。 这是我的代码: <div id="fb-root"></div> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({appId
我成功登录,但事件对我不起作用。
每当我登录时,都没有调用函数“login”……我尝试将此登录函数分配给其他按钮以手动检查,警报起作用,但没有得到任何响应。
这是我的代码:
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({appId: MY_APP_ID, status: true, cookie: true, xfbml: true});
FB.Event.subscribe('auth.login', function(response) {
login();
});
};
function login(){
FB.api('/me', function(response) {
alert('You have successfully logged in, '+response.name+"!");
});
}
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}()); </script>
<fb:login-button autologoutlink='true'
perms='email,user_birthday,status_update,publish_stream'></fb:login-button>
window.fbAsyninit=函数(){
init({appId:MY_APP_ID,status:true,cookie:true,xfbml:true});
FB.Event.subscribe('auth.login',函数(响应){
登录();
});
};
函数登录(){
FB.api('/me',函数(响应){
警报('您已成功登录,'+response.name+“!”);
});
}
(功能(){
var e=document.createElement('script');
e、 类型='text/javascript';
e、 src=document.location.protocol+'//connect.facebook.net/en_US/all.js';
e、 异步=真;
document.getElementById('fb-root').appendChild(e);
}());
这是facebook应用程序设置:
您是否尝试过将all.js脚本加载到
而不是#fb root
?使用以下命令:
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/es_LA/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
而不是:
(function() {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
[编辑:更新样本]
SDK将元素插入到fb根目录中,这些元素应该相对定位
指向正文或相对于靠近页面顶部的元素
也可能会替换SDK源代码。资源: --
你能试着订阅其他活动,看看它是否有效吗
FB.Event.subscribe('auth.statusChange', function(response) {
// do something with response
});
从Facebook文档(尝试订阅此文档)
验证。验证响应更改任何与身份验证相关的更改都会触发此事件,因为它们都会影响会话:登录、注销、会话刷新。只要用户在应用程序中处于活动状态,会话就会随着时间的推移而刷新 身份验证状态更改
通常,您需要使用auth.authResponseChange事件。但在极少数情况下,您需要区分这三种状态:
1.已连接
2.已登录Facebook,但未与应用程序连接
3.根本没有登录Facebook 场景1(新用户) Facebook登录按钮的文本:“登录”
用户状态:用户未连接 现在,用户单击login并完成登录流 按钮的文本变为“注销”,这是唯一触发
'auth.login'
的时间
FB.Event.subscribe('auth.login', function (response) {
// do something with response
if (response.status === 'connected') {
// user connected
FB.api('/me', function (response) {
alert(response.name + " " + response.id);
});
}
});
场景2(现有用户)
如果登录到Facebook并已授权您的应用程序的用户访问了您的应用程序,则该用户会自动连接,登录按钮的文本为“注销”。在这种情况下,将以下代码添加到
fbAsyninit函数中
:
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
// connected
alert(response.name + " " + response.id);
}
});
FB.getLoginStatus
在每次页面刷新时都会被调用,但您也可以通过将其嵌入javascript函数在应用程序中随时调用它。仍然不起作用……这也是我在手动检查时收到的错误->代码:2500消息:“必须使用活动访问令牌查询有关当前用户的信息。”键入:“OAutheException”“您订阅的事件auth.login-在身份验证状态从未知更改为已连接时激发。”。也许你一直都有联系?其次,无论你试图访问什么,当用户通过身份验证时都需要accessToken:我已经用facebook应用程序设置更新了我的问题。不,我的意思是,你说“无论何时登录,函数“login”都没有调用”,下面的FB.Event.subscribe('auth.login',{…})
仅当您未登录并更改为登录时才会触发。请参阅更新的答案。