Юрий Матюхин

Проверка на блокировку рекламы, или «Пожалуйста, отключите AdBlock»

 

На рекламе зарабатывают популярные интернет ресурсы, такие как Хабр, Лайфхакер, да и множество других. Делается это для того, чтобы покрыть расходы на хостинг, зарплату авторам статей, поддержку и развитие ресурса.

С появлением AdBlock зарабатывать на рекламе стало сложнее. Я сам пользуюсь блокировщиком рекламы и ставлю его первым делом на компьютеры родителей и родственников. Это сильно уменьшает вероятность «подхватить» вирус. Они любят нажимать на всё мигающее и всплывающее с большой зеленой кнопкой СКАЧАТЬ БЕСПЛАТНО БЕЗ СМС 😔

Отключить AdBlock у пользователя разработчики не могут, поэтому остается три варианта:
1. Ничего не делать.
2. Определить включен ли блокировщик у пользователя и показать ему сообщение с просьбой отключить его на сайте.
3. Определить включен ли блокировщик у пользователя, заблокировать доступ к сайту и показать требование отключить блокировку, чтобы просмотреть содержимое.

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

Способ 1

Использовать популярный скрипт FuckAdBlock.

function adBlockNotDetected () {
    alert ('AdBlock не активен');
}
function adBlockDetected () {
    alert ('AdBlock активен');
}

Из плюсов — решение популярное и рабочее, есть поддержка сообщества.
Из минусов — нужно загружать дополнительно 6.75 KB.

Способ 2

Этот вариант крайне простой и рассчитан на то, что AdBlock блокирует любую загрузку внешних скриптов с названием ads.js. Поэтому нам надо создать такой файл и написать в нем:

window.noAdBlock = true;

А в HTML:

<script src="ads.js"></script>
<script>if  (!noAdBlock) { alert ('AdBlock включен!') }</script>

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

Способ 3

Третий способ основан на отлавливании события ошибки при загрузке рекламного скрипта:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"  onerror="alert ('AdBlock включен!')"></script>

Из плюсов — ничего не нужно грузить и все работает.
Из минусов — если у пользователя были проблемы с соединением, и файл по какой-то другой причине скрипт не загрузился, то он увидит сообщение о каком-то AdBlock, про который, возможно, даже не знает.

Что выбрать

Я отдаю свое предпочтение второму способу. Он очень простой и если есть поддержка http2 то совершенно незатратный. Возможно он не отловит все блокировшики, но большинство из них точно. А это именно то, что нужно в таких случаях.

Read more!