【问题标题】:Prevent blocking popups that appear with facebook SDK防止阻止与 facebook SDK 一起出现的弹出窗口
【发布时间】:2012-03-23 15:27:03
【问题描述】:

A 无法阻止 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会显示。有什么办法可以防止吗?

【问题讨论】:

  • 我也有同样的问题:/

标签: javascript facebook popup


【解决方案1】:

尝试在页面加载时立即检查登录状态,并将结果和 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' });
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多