Обнаружение всплывающих окон до входа пользователя в систему

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

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

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

Есть ли другие ненавязчивые методы для этого?


person Chris Conway    schedule 30.10.2008    source источник
comment
Альтернативный хакерский способ - проверить «[собственный код]» был предложен в stackoverflow.com/questions/26094333/   -  person Michael Freidgeim    schedule 21.02.2021


Ответы (5)


Прочтите Обнаружение блокировщика всплывающих окон с помощью Javascript:

Обычно вы проверяете, возвращает ли метод window.open дескриптор вновь открытого окна.

Выглядит так:

var mine = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no');
if(mine)
    var popUpsBlocked = false
else
    var popUpsBlocked = true
mine.close()
person Andre Bossard    schedule 30.10.2008
comment
Это очень похоже на то, что у меня уже есть. Я искал более ненавязчивый метод, хотя, думаю, это невозможно. - person Chris Conway; 12.11.2008

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

Opera по-прежнему возвращает объект Window, когда всплывающее окно заблокировано, поэтому вам нужно достаточно изучить объект, чтобы определить, настоящее ли это окно:

var popup = window.open(/* ... */);
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined");
person Jonny Buchanan    schedule 30.10.2008

Как отмечали другие, единственный способ узнать наверняка - это попробовать.

Однако в наши дни хороший примерный ответ на вопрос «Установлен ли блокировщик всплывающих окон» - «да». Все недавние браузеры по умолчанию блокируют всплывающие окна, поэтому вам лучше разработать свое приложение, чтобы оно правильно с этим справлялось. А именно, не пытайтесь window.open, кроме как в ответ на взаимодействие с пользователем (обычно onclick), и все будет в порядке.

person bobince    schedule 30.10.2008

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

person Codebeef    schedule 30.10.2008

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

person John Topley    schedule 30.10.2008
comment
Я могу понять, почему автор этого хочет. В нашем приложении к тому моменту, когда пользователь инициировал действие, требующее отдельного окна, он набрал довольно много данных. Если блокировщик всплывающих окон активен, то пользователь разрешает открывать новое окно, браузер обычно обновляет окно, в котором находится исходное приложение, что означает, что их данные теряются при перезагрузке нашего приложения Flex / Flash. - person Jaymie Thomas; 08.10.2009