Обновление:
Всплывающие окна существуют с очень древних времен. Первоначальной идеей было показать другой контент, не закрывая главное окно. На данный момент есть другие способы сделать это: JavaScript может отправлять запросы на сервер, поэтому всплывающие окна используются редко. Но иногда они все еще под рукой.
В прошлом злые сайты много злоупотребляли всплывающими окнами. Плохая страница может открыть множество всплывающих окон с рекламой. Поэтому сейчас большинство браузеров пытаются блокировать всплывающие окна и защищать пользователя.
Большинство браузеров блокируют всплывающие окна, если они вызываются вне пользовательских обработчиков событий, таких как onclick.
Если подумать, это немного сложно. Если код находится непосредственно в обработчике onclick, то это легко. Но что за всплывающее окно открывается в setTimeout?
Попробуйте этот код:
// open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);
Всплывающее окно открывается в Chrome, но блокируется в Firefox.
… И это также работает в Firefox:
// open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);
Разница в том, что Firefox обрабатывает тайм-аут в 2000 мс или менее приемлемо, но после него - убирает «доверие», предполагая, что теперь он «вне действия пользователя». Итак, первый заблокирован, а второй нет.
Оригинальный ответ, который был текущим 2012:
Это решение для проверки всплывающих окон было протестировано в FF (v11),
Safari (v6), Chrome (v23.0.127.95) и IE (v7 и v9). Обновите
Функция displayError для обработки сообщения об ошибке по вашему усмотрению.
var popupBlockerChecker = {
check: function(popup_window){
var scope = this;
if (popup_window) {
if(/chrome/.test(navigator.userAgent.toLowerCase())){
setTimeout(function () {
scope.is_popup_blocked(scope, popup_window);
},200);
}else{
popup_window.onload = function () {
scope.is_popup_blocked(scope, popup_window);
};
}
} else {
scope.displayError();
}
},
is_popup_blocked: function(scope, popup_window){
if ((popup_window.innerHeight > 0)==false){
scope.displayError();
}
},
displayError: function(){
alert("Popup Blocker is enabled! Please add this site to your exception list.");
}
};
Использование:
var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);
Надеюсь, это поможет! :)