FB.getLogin状态不起作用,如果用户处于非活动状态
FB.getLoginStatus not working if user is inactive
在我的画布应用(标签页)中,如果应用需要,我使用此代码获取访问令牌:
var accessToken = "";
FB.getLoginStatus(function (response) {
if (response.authResponse || response.status === 'connected') {
accessToken = response.authResponse.accessToken;
}else {
alert( response.status );
}
} );
return accessToken;
我工作正常。但是,如果用户打开应用程序并将其保留大约 30 分钟(或更少或更长时间,只是很长时间),则在此函数无法获取 accessToken 后,只需返回一个空字符串。在控制台日志中没有任何错误。之后,如果用户刷新页面,一切都很好...
我应该怎么做才能随时获得访问令牌?
这是
怎么回事:
FB.getLoginStatus 方法是异步完成的,你给它一个回调,一旦完成就执行。
在代码中,在发出异步请求后立即返回accessToken
,但不是在等待它完成。
它应如下所示:
FB.getLoginStatus(function (response) {
if (response.authResponse || response.status === 'connected') {
return response.authResponse.accessToken;
} else {
alert( response.status );
}
});
所以你可能会问自己"那么为什么它一开始就有效?",答案很简单:首先,SDK 拥有身份验证数据,不需要实际向 FB 服务器发出请求,正如它在方法文档中指出的那样:
往返Facebook的服务器
为了提高应用程序的性能,并非每次调用都要检查 用户的状态将导致向Facebook的服务器发出请求。 在可能的情况下,将缓存响应。第一次在当前 调用FB.getLoginStatus的浏览器会话,或者JD SDK是 初始化状态:true,响应对象将由 软件开发工具包。对FB.getLoginStatus的后续调用将从中返回数据 缓存的响应。
如果您尝试使用传递"true"的代码,如下所示:
var accessToken = "";
FB.getLoginStatus(function (response) {
if (response.authResponse || response.status === 'connected') {
accessToken = response.authResponse.accessToken;
} else {
alert( response.status );
}
}, true);
return accessToken;
那么它根本不应该起作用。
在这种情况下调用FB.login,如果用户仍然登录到FB并且您没有请求任何新权限,则只需打开弹出窗口并立即再次关闭它。
相关文章:
- Facebook共享链接适用于用户,但不适用于粉丝页面管理员
- 使用Jquery.click显示/隐藏切换,适用于新用户,但不适用于种子
- Java脚本插件,用于将数字转换为特定于区域性的货币格式,并将具有特定货币格式的非格式化数字转换为普通数字
- 在相对于用户当前 URL 路径的不同路径中设置 Cookie
- 如何将JS应用于用户在表格中添加的行
- 适用于年轻用户的 Javascript 提示框的替代方案
- 如果用户的浏览器早于以下版本,则显示一条消息:IE 10、Firefox 39、Chrome 39、Opera 8
- Firebug 不推荐将“delete”运算符应用于非限定名称
- 使用 Javascript 和 Google Calendar API v3,如何允许用户指定非主日历来添加事件
- FB.getLogin状态不起作用,如果用户处于非活动状态
- 在 tinyMCE 中,将格式应用于非编辑区域
- 什么时候“;src”;在脚本标记中引用本地文件系统上的资源(相对于非本地文件系统)
- 函数适用于非动态加载的图像
- 如何将不透明度应用于非活动滑块项目
- ajax表单提交重定向类似于非ajax表单
- 试图阻止用户输入非数字或超出特定范围的数字
- 在鼠标悬停时,将class应用于非鼠标悬停的元素
- 非javascript用户的非javascript弹出窗口
- 当用户处于非活动状态时,如何结束会话?
- Range.select() 等效方法,适用于非 IE 浏览器