Я хотел бы иметь возможность определить, использует ли пользователь программное обеспечение для блокировки рекламы, когда он посещает мой веб-сайт. Если они используют его, я хочу отобразить сообщение с просьбой отключить его, чтобы поддержать проект, как это делает этот сайт .
Если вы заходите на этот сайт, и в вашем браузере включено какое-то программное обеспечение для AdBlock, тогда вместо того, чтобы показывать фактические объявления, на сайте появляется небольшой баннер, информирующий пользователей о том, что доход от рекламы используется для размещения проекта, и им следует рассмотреть возможность отключения AdBlock. ,
Я хочу сделать это на своем веб-сайте, я использую рекламу AdSense, как я могу это сделать?
Ответы:
Мое решение не относится к определенной рекламной сети и очень легкое. Я запускал его в производство в течение нескольких лет. AdBlock блокирует все URL, содержащие слово «реклама». Вот что я сделал:
Я добавил небольшой файл js в свой webroot с именем
ads.js
Это единственная строка кода в этом файле
Тогда где-то на моей странице:
Такие файлы, как ads.js, заблокированы как минимум следующими рекламодателями в Chrome:
Обновление на 2019-02-15:
Добавлен Ghostery в списке выше, потому что расширение теперь также блокирует запросы к ads.js. Очень кстати. Означает ли это, что Ghostery на самом деле помогает разработчикам обнаруживать блокировку рекламы с ее расширением?
Не работает с:
Конфиденциальность Badger
источник
js/ads.js
пожалуйста? поскольку я нахожусь в блоггере, я должен был загрузить.js
где-нибудь (как: Google Drive), и ссылка в этом случае не содержитads
. Было бы очень полезно, если бы вы дали ссылку на ваш файл.Не прямой ответ, но я бы поместил сообщение за объявлением для загрузки ... вместо того, чтобы пытаться его обнаружить, оно просто показывалось, когда объявление не показывалось.
источник
http://thepcspy.com/read/how_to_block_adblock/
С помощью jQuery:
Конечно, вам потребуется целевая страница для AdblockNotice.html, а класс .myTestAd должен отражать ваши фактические рекламные контейнеры. Но это должно работать.
РЕДАКТИРОВАТЬ
Как рекомендует TD_Nijboer, лучше использовать селектор
:hidden
(или:visible
, как я использую ниже), чтобыdisplay: none
он также проверялся:Конечно, оба они могут быть объединены в один
if
блок при желании.Обратите внимание, что
visibility: hidden
они также не будут захвачены (там, где пространство макета остается, но реклама не видна). Чтобы проверить это, можно использовать другой фильтр:Который даст вам массив рекламных элементов, которые являются «невидимыми» (с
0
теоретически, любой из них больше, чем проблема).источник
Redirecting in this case is a bad idea. If your advertising service goes down, all visitors could be redirected to that page.
Верно. Не говоря уже о том, что они просто соединили бы простой сценарий, чтобы победить контрмеры. Кроме того, действительно ли вы считаете, что, будучи агрессивными и решительными, пользователи будут мотивированы отключать свои блокировщики рекламы? Нет, все, что можно было бы сделать, - это разозлить их и отравить их против вашего сайта. Большинство сайтов предпочитают просто отображать сообщение, а не становиться враждебным.Никаких дополнительных запросов. Нет внешних библиотек. Просто простой JavaScript:
Кредит на пост Кристиана Гайлмана в , я думаю , что это, безусловно , является лучшим решением для обнаружения AdBlock.
источник
testAd.style.display = 'absolute'
и убрать его с экрана<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="background-color:red;height:300px;width:300px;position: absolute;left:0;top:0;"> </div>
(конечно, после тестирования css следует изменить на<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="height:1px;width:1px;position: absolute;left:-999px;top:-999px;"> </div>
)absolute
этоposition
ценность.window.onload
функциюБольшинство объявлений динамически загружаются в JavaScript. Я просто использовал событие onerror, чтобы определить, можно ли загрузить рекламный скрипт или нет. Кажется, работает.
Пример с GoogleAds:
Это можно использовать и для других элементов, чтобы узнать, не блокирует ли контент блокировщик рекламы. Этот метод может давать ложные срабатывания, если удаленные элементы не существуют или недоступны.
источник
offsetHeight
Чтобы определить, блокирует ли пользователь рекламу, все, что вам нужно сделать, - это найти функцию в javascript объявления и попробовать ее проверить. Неважно, какой метод они используют, чтобы заблокировать рекламу. Вот как это выглядит для рекламы Google Adsense:
Этот метод описан здесь: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam
источник
typeof
это накладные расходы, если вы проверяете свойство объекта. Используйте просто=== undefined
.Мое самое простое решение с помощью jquery:
Advertising.js просто ничего не содержит. Когда кто-то использует adblock, он терпит неудачу, и функция вызывается.
источник
Я знаю, что ответов уже достаточно, но так как этот вопрос возник в поиске Google по запросу «обнаружить adblock» в этой теме, я хотел бы дать некоторую информацию на случай, если вы не используете AdSense .
В частности, в этом примере вы можете определить, используется ли список Adblock по умолчанию, предоставляемый Firefox Adblock. Преимущество состоит в том, что в этом блок-листе есть элемент, заблокированный с помощью идентификатора CSS
#bottomAd
. Если я добавлю такой элемент на страницу и проверим его высоту, я знаю, активна ли блокировка рекламы:Остальное делается с помощью обычного jQuery подозреваемого:
Как видно, я использую
setTimeout
по крайней мере 1 мс. Я проверял это в различных браузерах и большую часть времени, непосредственно проверяя элемент,ready
всегда возвращал 0; неважно, был ли активен адблокер или нет. У меня было две идеи по этому поводу: либо рендеринг еще не завершен, либо Adblock еще не пришел. Я не удосужился продолжить расследование.источник
.is(":hidden")
проверка зависит от того, равны ли высота и ширина нулю. Если вы просто установили высоту на 0, но div все еще занимает ширину, то jQuery не считает его «скрытым». Так что, можете ли вы сказать,.is(":hidden")
в некоторой степени зависит от того, как рекламодатель решает изменить размер / скрыть контент.Мой совет: не делай этого!
Любой сценарий, в котором вы относитесь к людям как к "преступникам", приведет к тому, что они будут сопротивляться.
Вот мое предложение.
Поместите небольшое ненавязчивое сообщение вверху страницы (независимо от того, блокируются ли объявления) с текстом
I *totally* respect your right to block ads
и ссылкой на другую страницу / всплывающее окноRead more ...
.На другой странице проясните, что вы понимаете, что это их компьютер, и они могут использовать блокировку рекламы.
Кроме того, дайте понять, не используя обвинения, что использование этих блокировщиков затрудняет доставку отличного контента (подробно объясняет, почему) и что, хотя вы бы предпочли, чтобы блокировка рекламы не происходила на вашем сайте, это полностью их решение. Сосредоточьтесь на положительных сторонах отключения блокировки.
Те, кто категорически против рекламы, проигнорируют это, но у вас никогда не было шанса убедить их в любом случае. Те, кто равнодушен, могут быть склонны к вашей апелляции, поскольку вы не выполняете всю работу «дайте мне дорогу или я заберу свой мяч и уйду домой», что, честно говоря, должно быть исключительной областью пятилетних детей.
Помните, никто не приставлял пистолет к вашей голове и не заставлял вас класть свои вещи в сеть. Относитесь к своим читателям / пользователям с уважением, и вы, вероятно, обнаружите, что многие из них ответят взаимностью.
источник
Они используют тот факт, что рекламный код Google создает iframe с идентификатором "iframe". Так что, если у вас еще нет чего-то на этой странице с этим идентификатором, это будет работать и для вас.
источник
Просто добавьте небольшой скрипт на свой сайт:
С именем adsbygoogle.js
Затем сделайте следующее:
Нашел это решение здесь
источник
Я заметил, что предыдущие комментарии используют Google AdSense в качестве объекта для тестирования. Некоторые страницы не используют AdSense, и использование блока AdSense в качестве теста не очень хорошая идея. Потому что блок AdSense может нанести вред вашему SEO. Вот пример того, как adblocker обнаруживает простой заблокированный класс:
Html:
Jquery:
«ablockercheck» - это идентификатор, который блокирует adblocker. Поэтому, проверив, виден ли он, вы можете определить, включен ли adblocker.
источник
Кажется, AdBlock блокирует загрузку файлов JavaScript AdSense (и т. Д.). Таким образом, если вы используете асинхронную версию объявлений AdSense, вы можете проверить,
adsbygoogle
является ли онаArray
. Это необходимо проверить через несколько секунд, поскольку асинхронный сценарий ... асинхронный. Вот примерный план :Чтобы пояснить, вот пример того, как выглядит код асинхронной рекламы AdSense:
Обратите внимание, что
adsbygoogle
инициализируется как массив.adsbygoogle.js
Библиотека изменяет этот массив в ,Object {push: ...}
когда он выполняет. Проверка типа переменной через определенное время может сказать вам, был ли загружен скрипт.источник
Этот подход я использую на своем сайте, может быть, вы найдете его полезным. На мой взгляд, это самое простое решение.
AdBlocker блокирует определенные классы и элементы html. Посмотрев эти селекторы любых заблокированных объявлений в консоли разработчика (они все перечислены), вы можете увидеть, какие элементы будут всегда заблокированы.
Например, просто просмотрите эту страницу вопроса на stackoverflow, и вы увидите кучу заблокированных объявлений.
Например, любой элемент с
bottom-ad
классом автоматически блокируется.bottom-ad
классом:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
$('.bottom-ad').css('display') == "none"
или даже лучше, используя$('.bottom-ad').is(':visible')
Если значение равно
true
, то AdBlocker активен.источник
Вам не нужен дополнительный HTTP-запрос, вы можете просто вычислить высоту поддельного добавления.
Кстати, вот полный список, соответствующий элементам, которые рекламодатели избегают рендеринга.
источник
безопасный способ - обернуть вашу рекламу внутри
<div>
и проверить высотуэто работает с adblock plus и брандмауэром bluehell.
источник
Эффективный способ проверить наличие рекламного блока: просто проверьте, включен ли рекламный блок, попытавшись вызвать URL-адрес объявлений Google. Если да, тогда запустите callback_has_adblock, если нет, то запустите callback_no_adblock. Это решение стоит на один запрос больше, но, по крайней мере, оно работает:
Это решение работает для всех видов рекламы, а не только для Google AdSense.
источник
Несмотря на возраст этого вопроса, я недавно нашел его очень полезным и поэтому могу только предположить, что есть другие, все еще просматривающие его. Посмотрев здесь и в других местах, я предположил, что основные три проверки на стороне клиента для косвенного обнаружения блокировщика рекламы заключались в проверке заблокированных
div
/img
, заблокированныхiframe
и заблокированных ресурсов (файлов javascript).Может быть, это чрезмерно или параноидально, но это относится к системам блокировки рекламы, которые блокируют только один или два из выбора и, следовательно, не могли бы быть покрыты, если бы вы сделали только одну проверку.
На странице вы запускаете проверки добавить: (я использую jQuery)
и добавить следующее где-нибудь еще на странице:
Я использовал div с именем приманки, а также размещенное снаружи изображение с текстом «Advert» и размерами, используемыми AdSense (благодаря placehold.it!).
В
advertisement.js
вас должны добавить что - то к этому документу , который мы можем проверить позже. Хотя кажется, что вы делаете то же, что и раньше, вы фактически проверяетеadvertisement.js
загружаемый файл ( ), а не вывод.А затем сценарий обнаружения блокировщика рекламы, который объединяет все
Когда документ готов , т.е. разметка загружена, мы также добавляем в документ iframe. Затем, когда окно загружается , т.е. содержимое вкл. загружаются изображения и т. д., мы проверяем:
advertimsent.js
был не заблокировано.И стили:
Надеюсь это поможет
источник
Если вы используете новый код AdSense, вы можете легко проверить, не прибегая к проверке контента или CSS.
Разместите ваши объявления как обычно в вашей разметке:
Затем вы вызываете код AdSense в нижней части вашей страницы (обратите внимание , не используйте
"async"
флаг при вызовеadsbygoogle.js
сценария):Затем добавьте этот небольшой фрагмент кода ниже:
AdSense всегда создает / устанавливает флаг
adsbygoogle.loaded
вtrue
при загрузке объявлений, Вы можете поместить проверку в функции SetTimeout отложить проверку на несколько секунд.источник
Большинство adblocker отменяют HTTP-запрос к элементу
ads.js
и создают0px
его, но когда-то adblocker удалял DOM , и некоторые из приведенных выше ответов потерпят неудачу, так как не проверяют существование элемента.Использование
setTimeout()
это хорошая практика, потому что без него, сценарий будет гоняться с Adblocker.Сценарий ниже проверит, существует ли / удален dom, и проверит,
offsetHeight
существует ли элемент.источник
Все приведенные выше ответы действительны, однако большинство из них не будут работать для блокировки рекламы на уровне DNS.
Блокировщики рекламы на уровне DNS (такие как pi-hole ) в основном возвращают NXDOMAIN (домен не существует) для списка доменов, блокирующих рекламу (например, telemetry.microsoft.com не будет существовать, когда это будет).
Есть несколько способов обойти это:
Способ A : Запрос объявлений по IP-адресу, а не по домену.
Этот метод немного раздражает, так как вам придется отслеживать IP-адреса. Это будет проблематично, если ваш код плохо поддерживается или регулярно обновляется.
Метод B : заблокировать все запросы, которые не выполняются, даже если клиент сообщает о NXDOMAIN.
Это будет очень раздражать пользователей, если это «законный» NXDOMAIN.
источник
и в файле getbanner.cfm:
Я думаю, что это самый простой способ обнаружить adblock.
источник
true
всегдаВот что сработало для меня:
источник
Я знаю, что на этот вопрос уже есть ответ, но я посмотрел предложенный образец сайта и вижу, что они делают это так:
источник
Нет необходимости в тайм-аутах и DOM нюхает. Просто попытайтесь загрузить скрипт из популярных рекламных сетей и посмотрите, не перехватил ли блокировщик рекламы HTTP-запрос.
источник
Просто создал свой «плагин» для решения этой проблемы, и он работает очень хорошо:
adBuddy + jsBuddy:
ADBuddy JSBuddy GitHub
Я добавил мобильную совместимость и обнаружение jsBlocking среди прочего ... (Как наложение, которое показывается пользователям, просящим их отключить программное обеспечение adBlocking / jsBlocking ); Также сделал его отзывчивым, дружелюбным.
Он открыт по лицензии Coffeeware .
источник
Я понимаю ваше напряжение, и вы можете проверить, был ли элемент создан скриптом или элемент скрыт. И если мы говорим о блокировке рекламы, вы можете рассчитывать только на видимость элемента, а не на наличие элемента.
Элемент, созданный с помощью стороннего сценария, никогда не будет представлен, если сценарий недоступен в данный момент (ошибка DNS, ошибка удаленного веб-сервера, предварительная загрузка автономной веб-страницы и т. Д.), И вы всегда получите ложноположительный результат.
Все остальные ответы с проверками верны, но имейте это в виду.
источник
timing's
Ответ хорошо продуман, но больше не работает, поэтому я изменил имя файла js на «adsense» из «ads», и теперь он работает как шарм!Вот код, может быть, это кому-то поможет:
В файле Js поместите только эту строку:
var adblockDetecter = true;
источник
Теперь есть лучший способ сделать это с помощью простого JS-скрипта под названием AdBlock Detector.
Вот как его использовать:
Добавьте это в свой
<head>
раздел:Теперь вы можете использовать
ab-message
идентификатор везде, где вы хотите отобразить сообщение для пользователей AdBlock:Обратите внимание на встроенный стиль, добавленный, чтобы скрыть его изначально (конечно, вы также можете сделать это из своего собственного файла CSS).
Также обратите внимание, что это занимает 500 мс, потому что он должен ждать, пока adblocker сделает свое дело, или он не будет работать.
Небольшое объяснение того, как работает этот скрипт
Во-первых, он добавляет iframe с источником случайно сгенерированной ссылки. (Он генерируется случайным образом, потому что некоторые рекламные блоки умные, в какой-то момент они понимают, что ссылка фальшивая).
Затем он запускает несколько проверок для этого iframe (если он был загружен успешно или его стиль был изменен). Если один из этих тестов верен, он отображает
ab-message
элемент для блокировки пользователей.Этот скрипт работает для большинства (если не всех) блокировщиков рекламы.
EXTRA
Нет никакого смысла в том, чтобы просто создать суть, но вместо этого я создал проект Github, но, тем не менее, проверьте его и отметьте, если он вам помог.
abDetector: простой ванильный JavaScript-детектор AdBlock.
Наслаждаться.
источник
Вы можете проверить это, это может помочь обнаружить-adblocker
Это реализация времени ответа
Добавьте это перед любым скриптом в теге head:
Тогда позже используйте это:
источник
window.adblocker
в консоли браузера, если оно вернется,true
тогда adblocker включен, в противном случае он вернется.false
Вы можете проверить полную документацию Detect-Adblocker