我遇到了一个问题,无法阻止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,则此条件(如果(response.status ===)返回false。并且浏览器将阻止由FB.login显示的弹出窗口。有没有办法防止这种情况发生?