朋友们,
我正在开发一个网站,其中Facebook Javascript API
用于向朋友发送消息。
当用户退出fb时,弹出js API对话框时显示错误
"Refused to display 'https://www.facebook.com/login.php?api_key=0&skip_api_login=1&display=dialo…cale%3Den_US%26name%3DAnything%26to%3D1791715188%26from_login%3D1&rcount=1' in a frame because it set 'X-Frame-Options' to 'DENY'."
当前,我正在使用FB.getLoginStatus来检测用户是否已注销。但这只能第一次工作,我无法动态检查它(这意味着当我退出fb帐户并回到同一个窗口并尝试发送下一条消息而不刷新时,它会显示上述错误。)。
此处如何动态检测用户当前已注销。有没有办法在没有页面刷新的情况下动态检查FB.getLoginStatus
。
我在下面显示我的代码。
$(document).ready(function(){
window.fbAsyncInit = function() {
FB.init({appId: '**************', xfbml: true, cookie: true,status:true,oauth:true});
/*FB.Event.subscribe('auth.login', function() {
//window.location.reload();
});*/
FB.Event.subscribe('auth.logout', function(response) {
alert('logged out!');
});
};
function facebook_send_message(to,name) { //function called when a button is clicked
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
console.log('how to check');
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
send_message(to,name);
}
else if (response.status === 'not_authorized') {
console.log('not_authorized');
// the user is logged in to Facebook,
// but has not authenticated your app
}
else
{
console.log('hi');
FB.login(function(response) {
if (response.authResponse)
{
send_message(to,name);
//getUserInfo(); // Get User Information.
} else
{
console.log('Authorization failed.');
}
},{scope: 'email'});
}
});
}
如果用户已登录, send_message(to,name);
将发送消息,
目前这是第一次,它工作清楚,但从第二次没有页面刷新,如果我们从fb退出,那么FB.getLoginStatus
仍然显示response.status
为'connected'
,因此发生错误。
等待您的回复。 在此先感谢
答案 0 :(得分:1)
根据Facebook,
https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/
为了提高应用程序的性能,并非每次检查用户状态的调用都会导致对Facebook服务器的请求。在可能的情况下,缓存响应。在当前浏览器会话中第一次调用FB.getLoginStatus,或者JS SDK初始化为status:true,响应对象将由SDK缓存。对FB.getLoginStatus的后续调用将返回此缓存响应中的数据。
这可能导致用户自上次完整会话查询以来登录(或退出)Facebook的问题,或者用户已在其帐户设置中删除了您的应用程序。
要解决此问题,请调用FB.getLoginStatus,并将第二个参数设置为true以强制向Facebook进行往返 - 有效刷新响应对象的缓存。
FB.getLoginStatus(function(response) {
// this will be called when the roundtrip to Facebook has completed
}, true);