Предотвращение блокировки всплывающих окон - PullRequest
12 голосов
/ 10 февраля 2011

Я использую метод входа в Facebook в своем коде при загрузке страницы, но когда я выполняю этот код, блокировщик всплывающих окон закрывает окно разрешений Facebook.

Как я могу открыть это окно с помощью Javascript без необходимости делать исключение в блокировщике всплывающих окон?

Ниже мой код:

FB.login(function(response)
{
    if(response.session!=null)
    {
        window.location.href='http://example.com';
    }
},
{ perms: 'email,user_birthday,publish_stream' });

Ответы [ 5 ]

20 голосов
/ 27 марта 2012

Вы можете сделать что-то вроде -

var uri = encodeURI('http://example.com');
FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
                window.location.href=uri;
      } else {
         window.location = encodeURI("https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri="+uri+"&response_type=token");
      }

Это будет просто перенаправить напрямую вместо открытия всплывающего окна

15 голосов
/ 11 февраля 2011

Это специально отрицается в документации:

«Вы должны вызывать это только для пользовательского события, когда оно открывает всплывающее окно. Большинство браузеров блокируют всплывающие окна, если они не были инициированы пользовательским событием, например нажатием кнопки или ссылки."

Это также просто плохой UX.

6 голосов
/ 14 августа 2012

Да, вам нужно вызвать его с событием пользователя, но строго с событием onclick, а не с любым другим:

<a href="#" onclick="fbLogin()"> Login</a> <!-- works -->

<a href="#" onmousedown="fbLogin()"> Login</a> <!-- doesnt work -->

<a href="#" onmouseup="fbLogin()"> Login</a> <!-- doesnt work -->
6 голосов
/ 10 февраля 2011

Не было бы смысла в существовании блокировщиков всплывающих окон, если бы вы могли просто кодировать их.Вам нужно либо найти метод, который не использует всплывающее окно, либо потребовать некоторого взаимодействия с пользователем в браузере, чтобы открыть всплывающее окно.

5 голосов
/ 10 февраля 2011

Если вы попытаетесь открыть всплывающее окно автоматически, существует высокая вероятность того, что блокировщики всплывающих окон станут активными, насколько я знаю, это должно быть основано на каком-либо действии пользователя, например, нажатии кнопки. Попробуйте выполнить этот код одним нажатием кнопки, он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...