在阻止Facebook JS SDK显示的弹出窗口时遇到问题。阅读文档后,我了解JS SDK的调用必须在用户点击之后。 此代码正常工作,浏览器不会阻止弹出窗口:
function Login() {
FB.login(function (response) {
if (response.authResponse) {
DoSmth(response.authResponse.accessToken);
}
}, { scope:'user_birthday, publish_stream' });
}
但是,如果我将在任何地方使用此代码(例如,发布到墙上,获取用户数据),即使用户已经登录Facebook,弹出窗口也会在所有情况下显示。我认为,这不好。
要确定该用户已经登录,我使用此代码:
function CheckOrLogin() {
FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
DoSmth(response.authResponse.accessToken);
}
else {
FB.login(function (response) {
if (response.authResponse) {
DoSmth(response.authResponse.accessToken);
}
}, { scope:'user_birthday, publish_stream' });
}
}, true);
}
在这种情况下,如果用户已登录,则不会显示弹出窗口。但如果用户尚未登录facebook,则此条件(if(response.status ===)返回false。浏览器将 BLOCK 弹出窗口,将由FB.login显示。有什么方法可以阻止这种情况吗?
答案 0 :(得分:0)
尝试在加载页面时立即检查登录状态,并将结果和accessToken存储在某个变量中。
var userData = {isConnected: false, token: null};
FB.getLoginStatus(function (response) {
userData.isConnected = (response.status === 'connected');
if (userData.isConnected) {
userData.token = response.authResponse.accessToken;
}
}, true);
当用户点击某个按钮时 - 只需检查变量的值。
function CheckOrLogin() {
if (userData.isConnected) {
DoSmth(userData.token);
} else {
FB.login(function (response) {
if (response.authResponse) {
DoSmth(response.authResponse.accessToken);
}
}, { scope:'user_birthday, publish_stream' });
}
}