我使用FB登录功能使,但问题正在添加到我的是,每当我点击页面介质装入前的FB登录按钮建成后,块FB登录的弹出,但如果我上fblogin点击之后的第二次传递给加载事件它作品
下面是我使用的功能:
function fb_login() {
var email='';
console.log(loginClassbackQueue);
// console.log('user wants to login with fb');
FB.getLoginStatus(function(response) {
if(response.status!='connected'){
FB.login(function(response) {
// console.log(response);
if (response.authResponse) {
// console.log('user logged in successfully');
// console.log(response);
email = update_f_data_login(response);
$('#fb_login_popup, #popup_overlay').hide();
// loginme(email);
}
else {
loginClassbackQueue = [];
// console.log('user failed to login');
}
// console.log('fb login completed successfully');
}, {scope:"email,user_birthday,user_likes,user_location,friends_likes,publish_actions"}
);
}
else{
// console.log('logged in and connected');
email = update_f_data_login(response);
$('#fb_login_popup, #popup_overlay').hide();
}
});
}
当我在这个网站做同样的动作http://fab.com/它打开弹出式窗口始终不曾阻止弹出窗口。
你不能打电话FB.login
从回调FB.getLoginStatus
。
浏览器往往会阻止弹出窗口的弹出窗口不生成为一个用户的点击行为的直接结果。
因为FB.getLoginStatus
做一个ajax
调用,调用FB.login
在它的响应,将作为这个调用的结果打开弹出窗口被阻止 。
一个解决问题的方法是调用FB.getLoginStatus
在页面加载并使用你的内部响应fb_login()
方法。
这是完全正常的打电话FB.login
从回调FB.getLoginStatus
,只要你有信心,登录状态已经在内部装载 。 要做到这一点,请使用下列之一:
-
FB.init({..., status: true, ... })
-
FB.getLoginStatus(...)
-
FB.login(...)
-
FB.ui(...)
技术上所有这些选项使用FB.ui
。 异步过程必须完成,这可能需要几秒钟。 只要你已经使用上述方法中的一个进行跨域调用与FB,而异步过程完成后,得到了登录状态不会让一个异步调用,并弹出不会被阻塞。
你也应该确保不指定true
第二个参数,如FB.getLoginStatus(..., true);
。
请务必将状态设置为真 ,这将固定的弹出窗口拦截器的问题。
window.fbAsyncInit = function() {
FB.init({
appId : '{your-app-id}',
cookie : true, // enable cookies to allow the server to access
// the session
xfbml : true, // parse social plugins on this page
version : 'v2.5', // use graph api version 2.5
status : true // set this status to true, this will fixed popup blocker issue
});
我有同样的问题,并踢我的头3天。 我没有绊倒上述解决方案,他们在Firefox和优势,但在Chrome的工作没有关系什么都我没有我仍然有阻塞左右和中心。另一个问题是,当我打电话从按下按钮事件的登录对话框中的功能是不会阻止,但在登录对话框关闭了进一步行动后,所以我就死也没有得到任何答复。 所以我的解决办法是和跟随,但你并不需要按下按钮,在登录会重定向到FB-登录页面没有按钮按下事件,并在返回继续与所有其他的SDK步骤。 只是根据你的需要添加到您的代码,看看是否有帮助,从那里调整
function statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
// The response object is returned with a status field that lets the
// app know the current login status of the person.
// Full docs on the response object can be found in the documentation
// for FB.getLoginStatus().
if (response.status === 'connected') {
// Logged into your app and Facebook.
document.getElementById('Image2').style.display = "none";
document.getElementById('mail').style.display = "in-line";
testAPI();
} else {
// The person is not logged into your app or we are unable to tell.
window.alert("Faça login no facebook antes de continuar - Obrigado");
window.location.href = 'https://www.facebook.com/dialog/oauth' +
'?client_id=55215442252214521548' +
'&scope=public_profile,email,user_friends' +
'&redirect_uri=' + encodeURIComponent(document.URL);
document.getElementById('Image2').style.visibility = "hidden";
document.getElementById('mail').style.display = "in-line";
}
}
// This function is called when someone finishes with the Login
// Button. See the onlogin handler attached to it in the sample
// code below.
function checkLoginState() {
FB.getLoginStatus(function (response) {
statusChangeCallback(response);
});
}