Предотвратить блокирование всплывающих окон, которые появляются с Facebook SDK - PullRequest
4 голосов
/ 23 марта 2012

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.Есть ли способ предотвратить это?

1 Ответ

0 голосов
/ 06 июля 2013

Попробуйте проверить статус входа сразу при загрузке страницы, и сохранить результат и 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' });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...