我有一个FB应用程序需要集成在FB页面选项卡中。在应用程序中,我想提供一个"注册与FB登录"选项。单击此按钮应提示用户登录FB登录对话框。成功登录后,它应提示用户进行身份验证并允许应用程序使用其详细信息。一旦用户允许应用访问用户详细信息,它应该在新窗口中将详细信息发布到我的网站。
当我独立测试应用程序时,此过程正常。但是,当我将应用程序添加到fb页面时,chrome会阻止Fb登录对话框。在打开Fb登录对话框之前,我会检查用户是否已登录FB并已接受该应用程序。为此,我使用FB.getLoginStatus(checkLoginStatus);我认为由于这次检查,上下文转移到脚本执行,因此Chrome会阻止登录对话框。
是否有解决此问题的方法?帮助将受到高度赞赏。
我的代码如下:
使用span创建facebook按钮,并将id fbc-login-button赋予标签。
$("#fbc-login-button").click(function(){
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
console.log('Logged in.');
if (response.authResponse) {
fbAppSignup(response);
}
}
else {
FB.login(function(response) {
if (response.authResponse) {
fbAppSignup(response);
}
},{scope: "email, user_friends",display:"popup"});
}
});
function fbAppSignup(response,myPopup){
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
FB.api("/me", function(response) {
$("#social_media_data").val(JSON.stringify(response));
$("#medium").val("facebook");
$("#accessToken").val(accessToken);
$("#socialClickSource").val("fbapp_facebook_signup");
$("#fbSignUp").submit();
return true;
});
}
答案 0 :(得分:1)
Facebook文档中的示例有点误导,您不应该在异步回调函数中使用FB.login
- 这正是您现在正在做的事情,因为FB.getLoginStatus
是异步的。始终在用户交互(鼠标单击)上调用FB.login
,否则它将被智能浏览器阻止。
FB.getLoginStatus
:在页面加载时,用于刷新用户会话和
检查用户是否已获得授权FB.login
:关于用户互动我回答过关于这个问题的其他主题: