Как определить, заблокированы ли всплывающие окна в Chrome? - PullRequest
1 голос
/ 10 января 2012

Я пытаюсь загрузить страницу авторизации на Facebook, чтобы пользователи могли подключить свои fb-аккаунты к моему сайту.Проблема в том, что это другой домен.Код следующий:

var left = (screen.width/2)-(550/2);
    var top = (screen.height/2)-(250/2);
    fbPopUp = window.open(authorizeURL,'fbWindow','menubar=0,status=0,titlebar=0,toolbar=0,resizable=1,width=400,height=275, top='+top+' , left='+left);

Как узнать, действительно ли это окно открыто или нет?Я пробовал решение Обнаружить заблокированное всплывающее окно в Chrome

Ответы [ 5 ]

7 голосов
/ 25 января 2012

В основном в Chrome есть ошибка. Несмотря на то, что оно скрывает всплывающее окно, оно все еще выполняется, и вы по-прежнему получаете объект окна обратно - поэтому регулярные проверки не работают.

Вот решение, которое сработало для меня:

var popup = window.open(url);

if (popup) {
  popup.onload = function () {
    console.log(popup.innerHeight > 0 ? 'open' : 'blocked');
  }
} else {
  console.log('blocked');
}

Рабочий пример здесь: http://jsbin.com/uticev/3/

6 голосов
/ 06 сентября 2012

Я искал и искал, и, наконец, нашел это, поэтому мне пришлось поделиться, потому что, как другие люди говорили, что это сломано в новых версиях Chrome. Таким образом, фиксированное решение таково:

var popUp = window.open( url );
setTimeout( function() {
   if ( popUp.outerHeight === 0 ) {   
      alert('blocked'); 
   }
}, 25);
2 голосов
/ 30 мая 2013

только что изменил ответ Реми. Это работает для меня.

        var win = window.open("", 'child','width=10,height=10,status=no,resizable=no');
        var objwin = new RegExp('object','gi');
        var isblock = false;

        if(objwin.test(String(win))) {
            if(typeof win.outerHeight ==="undefined" || parseInt(win.outerHeight)<10){
                isblock = true;
            }
            win.close();
        }else{
               isblock = true;
        }

        if(isblock){
          // do something here
        }
0 голосов
/ 29 июля 2013

Это решение хорошо работает для меня:

loginWindow = window.open(url, '_blank', options);

setTimeout(function () {
    if (!loginWindow || loginWindow.closed || typeof loginWindow.closed == 'undefined' || parseInt(loginWindow.outerWidth) == 0) {
        alert('Turn off pop-up blocker and try again.');
    }
    else {
        loginWindow.focus();
    }
}, 500);
0 голосов
/ 22 июля 2013

Simple:

var popup = window.open(host);
popup.onload = function (){
    if (!popup.innerHeight > 0){
        popup.close();
        // Popup blocked
    } else {
        // Popup enabled
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...