2012-03-23 2 views
4

У вас есть проблемы с блокировкой всплывающих окон, которые отображаются в Facebook JS SDK. После чтения документации я понимаю, что вызов JS SDK должен быть после щелчка пользователя. Этот код работает правильно и браузер не блокирует всплывающие окна:Предотвращение блокировки всплывающих окон, которые появляются в facebook 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); 
} 

В этом случае всплывающее окно не будет отображаться, если пользователь уже вошел в систему Но если пользователь не вошел в фейсбуке. , это условие (if (response.status ===) возвращает false. И браузер будет BLOCK всплывающее окно, которое будет показано FB.login. Есть ли способ предотвратить это?

+0

У меня такая же проблема: / – Multitut

ответ

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' }); 
    } 
} 
Смежные вопросы