0

Как проверить, работает ли Popup Blocker в браузере?

Некоторым сайтам не хватает одного окна, и они открывают новые. Все ненавидят эти всплывающие окна, но иногда без них никак. Однако, проблема в том, что во всех современных браузерах встроен, так называемый, Popup Blocker — механизм блокировки всплывающих окон. Он включен по умолчанию. И это приводит к тому, что окно, которое мы хотим открыть, не открывается. Конечно, браузер сигнализирует об этом, но кого это волнует? Да и не всегда его сигнализация очевидна пользователям. Особенно начинающим.

Так как же проверить, открылось наше окно или заблокировано механизмом блокировки?

var popUp, windowName, attempts, attempt;

function chromedetect() {

	if (popUp.innerHeight > 1){
		done();
	}
	else {
		attempt ++;
		if (attempt > attempts) {
			blocked();
		}
		else {
			setTimeout(chromedetect, 2000);
		}
	}
}


function blocked() {
	alert('Пожалуйста, разблокируйте всплывающее окно и обновите страницу.')
}

function done() {
	alert('Наконец-то!');
}

windowName = 'userConsole'; 

popUp = window.open('http://falsecode.ru', windowName);

attempts = 3;
attempt = 0;

if (popUp == null || typeof popUp == 'undefined' ) {
	blocked();
}
else if (popUp && popUp.innerHeight < 1) {
	// Хром еще не открыл окно, нужно это обработать.
	chromedetect();
}
else {
	done();
}

Сначала, мы пытаемся открыть окно, сохраняя результат. А затем проверяем, что вернулось. Если что-то существенное, отлично. Если нет, то показываем сообщение о том, что вероятно Popup Blocker браузера включен, и с этим нужно что-то делать.

Отдельно нужно сказать про Google Chrome. Он, как ни странно, не ведет себя как все приличные браузеры. Мы это определяем и обрабатываем в функции chromedetect(). Функция проверяет размеры окна несколько раз с интервалом в 2 секунды. И, если за это время ничего не изменилось, сдается: blocked(). Иначе всё хорошо, и вызывается функция done().

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *