Определение работы расширения AdBlock в браузере пользователя позволяет выводить соответствующие сообщения (например, просьбу отключить блокировщик) или ограничивать доступ к определённым страницам сайта. Задача решается достаточно просто.
Определение с помощью jQuery
Этот метод основан на проверке высоты блока, содержащего рекламу. Если AdBlock активен, высота блока будет равна нулю, так как реклама будет скрыта.
Подготовка страницы
Создайте HTML-страницу с рекламным блоком (например, с кодом AdSense). Важно обернуть рекламный блок в ещё один блок с помощью тега <div> и присвоить ему идентификатор, например, test-for-adblock. К этому внешнему блоку не применяются стили.
<div id="test-for-adblock">
<!-- Здесь размещается рекламный код -->
<p>Обычный параграф</p>
<!--AdSense код-->
</div>
Необходимо подключить библиотеку jQuery.
Создание скрипта
Скрипт должен выполняться после загрузки страницы. Для этого используется функция $.ready(). Для корректной работы необходима небольшая задержка (например, 100 миллисекунд) с помощью функции setTimeout(), чтобы дать AdBlock время скрыть рекламу.
$(document).ready(function() {
setTimeout(function() {
let adBlockHeight = $('#test-for-adblock').height();
if (adBlockHeight === 0) {
alert('AdBlock включен');
}
}, 100);
});
Код получает высоту блока #test-for-adblock с помощью функции height(). Если высота равна нулю, выводится предупреждение о включенном AdBlock.
Задержка
Задержка необходима, поскольку AdBlock может скрыть рекламу не мгновенно. Без задержки скрипт может проверить высоту до того, как AdBlock выполнит свою работу, что приведёт к некорректным результатам. Значение задержки (100 миллисекунд) может быть скорректировано в зависимости от скорости загрузки сайта. Слишком маленькая задержка может привести к ложноположительным результатам, а слишком большая — к замедлению работы страницы.
Проверка работоспособности
При выключенном AdBlock реклама отображается, и alert не срабатывает. При включенном AdBlock реклама скрывается, и alert с сообщением «AdBlock включен» появляется.