Обнаружение всплывающих окон перед входом пользователя
-
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.
Всплывающие окна, которые открываются в ответ на действия пользователя, такие как нажатие на ссылку, не должны блокироваться всплывающими окнами.