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

StackOverflow https://stackoverflow.com/questions/250216

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Существуют ли другие ненавязчивые методы для достижения этой цели?

Это было полезно?

Решение

Прочитайте Обнаружение блокировщика всплывающих окон с помощью 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()

Другие советы

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

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

var popup = window.open(/* ... */);
var popupBlocked = (!popup || typeof popup.document.getElementById == "undefined");

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

Однако хорошим приблизительным ответом на вопрос & # 8220; установлен блокировщик всплывающих окон & # 8221; в эти дни, & # 8220; да & # 8221 ;. Все последние браузеры по умолчанию будут блокировать ваши всплывающие окна, поэтому вам лучше спроектировать свое приложение, чтобы изящно справиться с этим. А именно, не пытайтесь открыть window.open, за исключением реакции на взаимодействие с пользователем (как правило, по нажатию кнопки мыши), и все будет в порядке.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top