Вопрос

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

Если вы заходите на этот сайт и в вашем браузере включена какая-либо программа adblock, то на сайте вместо реальной рекламы отображается небольшой баннер, сообщающий пользователям, что доходы от рекламы используются для размещения проекта, и им следует подумать об отключении Adblock.

Я хочу сделать это на своем сайте, я использую на нем рекламу adsense, как я могу это сделать?

Это было полезно?

Решение

Мое решение не зависит от определенной рекламной сети и очень легкое. Я управляю им в производстве в течение нескольких лет. Adblock блокирует все URL -адреса, содержащие слово «реклама». Итак, это то, что я сделал:

Я добавил небольшой файл JS в свой WebRoot с именем ads.js

Это единственная строка кода в этом файле

var canRunAds = true;

Тогда где -то на моей странице:

<html>
  <head>
    <script src="/js/ads.js"></script>
  </head>
  <body>
    <script>
      if( window.canRunAds === undefined ){
        // adblocker detected, show fallback
        showFallbackImage();
      }
    </script>
  </body>
</html>

Файлы, такие как ads.js, заблокированы по крайней мере этими Adblockers на Chrome:

  • Adblock
  • Adblock Plus
  • Adblock Pro
  • Гостери

Обновление на 2019-02-15:

Добавлено Ghostery в списке выше, потому что расширение теперь также блокирует запросы на Ads.js. Очень удобно. Означает ли это, что Гостери на самом деле помогает нам разработчикам обнаружить блокировку рекламы с их расширением?

Не работает с:

Уединение барсука

Другие советы

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

http://thepcspy.com/read/how_to_block_adblock/

С jQuery:

function blockAdblockUser() {
    if ($('.myTestAd').height() == 0) {
        window.location = 'http://example.com/AdblockNotice.html';
    }
}

$(document).ready(function(){
    blockAdblockUser();
});

Конечно, вам нужно будет иметь целевую страницу для adblocknotice.html, а класс .mytestad должен отражать ваши настоящие рекламные контейнеры. Но это должно работать.

РЕДАКТИРОВАТЬ

Как рекомендует td_nijboer, лучший способ - использовать :hidden (или же :visible, как я использую ниже) Селектор, чтобы, чтобы display: none также проверяется:

function blockAdblockUser() {
    if ($('.myTestAd').filter(':visible').length == 0) {
        // All are hidden, or "not visible", so:
        // Redirect, show dialog, do something...
    } else if ($('.myTestAd').filter(':hidden').length > 0) {
        // Maybe a different error if only some are hidden?
        // Redirect, show dialog, do something...
    }
}

Конечно, оба они могут быть объединены в один if Блок при желании.

Обратите внимание, что visibility: hidden не будет захвачен ни одним из них (где пространство макета остается, но объявление не видно). Чтобы проверить это, можно использовать другой фильтр:

$('.myTestAd').filter(function fi(){
    return $(this).css('visibility') == 'hidden';
})

Что даст вам множество элементов рекламы, которые являются «невидимыми» (при любом случае больше, чем 0 быть проблемой, в теории).

Нет дополнительных запросов. Нет внешних библиотек. Просто просто, простой JavaScript:

var adBlockEnabled = false;
var testAd = document.createElement('div');
testAd.innerHTML = '&nbsp;';
testAd.className = 'adsbox';
document.body.appendChild(testAd);
window.setTimeout(function() {
  if (testAd.offsetHeight === 0) {
    adBlockEnabled = true;
  }
  testAd.remove();
  console.log('AdBlock Enabled? ', adBlockEnabled)
}, 100);

  • Вы создаете элемент с классом ADSbox (как определено как съемный элемент в файле определения AdBlock Plus)
  • Вы добавляете его в документ и через некоторое время прочитаете его не
  • Если Adblock установлен, элемент не будет иметь никакой высоты.

Кредит Пост Кристиана Хейлманна, Я думаю, что это, безусловно, лучшее решение для обнаружения adblock.

Большинство объявлений динамически загружаются в JavaScript. Я только что использовал событие Onerror, чтобы обнаружить, можно ли загрузить рекламный скрипт или нет. Кажется, работает.

Пример с Googleads:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>

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

Чтобы обнаружить, блокирует ли пользователь рекламу, все, что вам нужно сделать, это найти функцию в Ad JavaScript и попробовать тестирование для нее. Неважно, какой метод они используют для блокировки объявления. Вот как это выглядит для рекламы Google Adsense:

if(!window.hasOwnProperty('google_render_ad') || window.google_render_ad === undefined) { 
    //They're blocking ads, display your banner
}

Этот метод изложен здесь: http://www.metamorphosite.com/detect-web-popup blocker-software-adblock-pam

Мое самое простое решение с jQuery:

$.ajax({
    url: "/scripts/advertisement.js", // this is just an empty js file
    dataType: "script"
}).fail(function () {
    // redirect or display message here
});

Реклама. JS просто не содержит ничего. Когда кто -то использует Adblock, он не работает, и функция вызывается.

Я знаю, что уже достаточно ответов, но, поскольку этот вопрос возникает в поисках Google «Обнаружение adblock» по этой теме, я хотел дать некоторую информацию на случай, если вы Не используя AdSense.

В частности, с помощью этого примера вы можете обнаружить, используется ли список Adblock, предоставленный Firefox Adblock, предоставленный Firefox Adblock. Он использует, что в этом блоке есть элемент, заблокированный с идентификатором CSS #bottomAd. Анкет Если я включаю такой элемент в страницу и тест на его высоту, я знаю, активен ли рекламный ролик или нет:

<!-- some code before -->
<div id="bottomAd" style="font-size: 2px;">&nbsp;</div>
<!-- some code after -->

Остальное сделано через обычный подозреваемый jQuery:

$(document).ready( function() {
  window.setTimeout( function() {
    var bottomad = $('#bottomAd');
    if (bottomad.length == 1) {
      if (bottomad.height() == 0) {
        // adblocker active
      } else {
        // no adblocker
      }
    }      
  }, 1);
}

Как видно, я использую setTimeout По крайней мере, с тайм -аутом 1 мс. Я проверил это в различных браузерах и большую часть времени, прямо проверяя элемент в ready всегда возвращался 0; независимо от того, был ли Adblocker активным или нет. У меня было две идеи по этому поводу: либо рендеринг еще не был сделан, либо Adblock еще не вступил. Я не удосужился расследовать дальше.

Мой совет: не делай этого!

Любой сценарий, в котором вы относитесь к людям как к «правонарушителям», приведет к тому, что они отбиваются.

Вот мое предложение.

Поместите небольшое ненавязчивое сообщение в верхнюю часть страницы (независимо от того, блокируются ли объявления) с текстом I *totally* respect your right to block ads и ссылка на другую страницу/всплывающее окно под названием Read more ....

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

Также дайте понять не имеющим То, что использование этих блокировщиков затрудняет предоставление вам отличного контента (объясняя, почему подробно), и что, хотя вы предпочитаете, чтобы блокирование объявления не произошло на вашем сайте, это полностью их решение. Сосредоточьтесь на позитивах отключения блокировки.

Те, кто категорически против рекламы, будут игнорировать это, но у вас никогда не было шансов убедить их в любом случае. Те, кто безразличен, вполне может быть связан с вашей апелляцией, так как вы не делаете целое «позволь мне добраться до меня, или я возьму свой мяч и пойду домой», что, честно говоря, должно быть эксклюзивной областью пятилетних детей.

Помните, что никто не держал пистолет к вашей голове и заставил вас поставить свои вещи в сеть. Относитесь к своим читателям/пользователям с уважением, и вы, вероятно, обнаружите, что их будет ответить взаимностью.

Они используют тот факт, что рекламный код Google создает iframe с идентификатором «iframe». Так что, пока у вас еще нет чего -то на странице с этим идентификатором, это будет работать и для вас.

<p id="ads">
<script type="text/javascript"><!--
google_ad_client = "their-ad-code-here";
/* 160x600, droite */
google_ad_slot = "their-ad-code-here";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

</p>

<script type="text/javascript"><!--
if(document.getElementsByTagName("iframe").item(0) == null)
{
    document.write("<div style='width:160px; height:600px; padding-top: 280px; margin-left:5px;border:1px solid #000000; text-align:center; font-family:century gothic, arial, helvetica, sans serif;padding-left:5px;padding-right:5px;'>Advertising seems to be blocked by your browser.<br /><br /><span style='font-size:10px'>Please notice that advertising helps us to host the project.<br /><br />If you find these ads intrusive or inappropriate, please contact me.</span><img src='http://www.playonlinux.com/images/abp.jpg' alt='Adblock Plus' /></div>");
}
--></script>

Я заметил, что предыдущие комментарии используют Google Adsense в качестве объекта для тестирования. Некоторые страницы не используют AdSense, и использование блока AdSense, поскольку тест не на самом деле является хорошей идеей. Потому что блок Adsense может нанести вред вашему SEO. Вот пример того, как я обнаружил от Adblocker Simple Blocked Class:

HTML:

<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

JQuery:

$(document).ready(function()
{
   if(!$("#ablockercheck").is(":visible"))
   {
     $("#ablockermsg").text("Please disable adblocker.").show();
   }
});

«Ablockercheck» - это идентификатор, который блокирует Adblocker. Так что проверяя его, если он виден, вы сможете обнаружить, включен ли Adblocker.

Просто добавьте небольшой сценарий на свой сайт:

var isAdsDisplayed = true;

С именем adsbygoogle.js

Затем делайте следующие:

<script src="/js/adsbygoogle.js"></script>
<script>
if(window.isAdsDisplayed === undefined ) {
  // AdBlock is enabled. Show message or track custom data here
}
</script>

Нашел это решение здесь

Adblock, кажется, блокирует загрузку файлов JavaScript AdSense (и т. Д.). Итак, если вы используете асинхронную версию рекламы AdSense, вы можете проверить, если adsbygoogle является Array. Анкет Это должно быть проверено через несколько секунд, так как асинхронный скрипт ... асинхронно. Вот Грубая наброска:

window.setTimeout(function(){
    if(adsbygoogle instanceof Array) {
        // adsbygoogle.js did not execute; probably blocked by an ad blocker
    } else {
        // adsbygoogle.js executed
    }
}, 2000);

Чтобы уточнить, вот пример того, как выглядит код Adsense Asynchronous Ads:

<!-- this can go anywhere -->
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<!-- this is where the ads display -->
<ins class="adsbygoogle" ...></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

Заметь adsbygoogle инициализируется как массив. А adsbygoogle.js Библиотека меняет этот массив в Object {push: ...} Когда он выполняется. Проверка типа переменной через определенное время может сказать вам, был ли сценарий загружен.

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

Adblocker блокирует конкретные классы и HTML -элементы, осматривая эти селекторы любых заблокированных рекламных объявлений в консоли разработчика (все они перечислены), вы можете увидеть, какие элементы всегда будут заблокированы.

Например, просто осмотрите эту страницу вопроса на Stackoverflow, и вы увидите кучу заблокированных рекламных объявлений.

Например, любой элемент с bottom-ad Класс автоматически блокируется.

  1. Я создал непустые элемент div с bottom-ad учебный класс:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
  2. После загрузки страницы просто проверьте, скрыт ли этот элемент. Я использовал jQuery, но не стесняйтесь использовать JavaScript:$('.bottom-ad').css('display') == "none" или даже лучше, используя $('.bottom-ad').is(':visible')

Если значение есть true, тогда Adblocker активен.

Вам не нужен дополнительный HTTP -запрос, вы можете просто рассчитать высоту фальшивого добавления.

Кстати, вот Полный список Сопоставление элементов, которые Adblockers избегают рендеринга.

window.adBlockRunning = function() {
    return (getComputedStyle(document.getElementById("detect"))["display"] == "none") ? true : false;
  }()

console.log(window.adBlockRunning);
#detect {
  height: 1px;
  width: 1px;
  position: absolute;
  left: -999em;
  top: -999em
}
<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads"></div>

Безопасный способ - обернуть вашу рекламу внутрь <div> и проверьте высоту

<div id="check-ab">
/* your ads code */
</div>

setTimeout(function(){
  if(document.getElementById("check-ab").offsetHeight === 0){
    console.log("ads blocked");
  }
  else{
    console.log("ads running");
  }
}, 100);

Он работает с Adblock Plus и брандмауэром Bluehell.

Эффективный способ проверить, есть ли Adblock: просто проверьте, включен ли Adblock, пытаясь запустить URL -адрес Google Ads. Если да, то запустите Callback_HAS_ADBLOCK, если нет, то запустите Callback_NO_ADBLOCK. Это решение стоит еще больше, но, по крайней мере, оно работает:

var hasAdBlock = function (callback_has_adblock, callback_no_adblock) {

    $.getScript( "http://pagead2.googlesyndication.com/pagead/show_ads.js" )
        .done(function( script, textStatus ) {
            callback_no_adblock();
        })
        .fail(function( jqxhr, settings, exception ) {
            callback_has_adblock();
    });
};

Это решение работает для всех видов рекламы, а не только Google Adsense.

Если вы используете новый код AdSense, вы можете сделать простую проверку, не обращаясь к контенту или CSS -проверкам.

Поместите свою рекламу как обычно в своей наценке:

<ins class="adsbygoogle" style="display: block;"
   data-ad-client="ca-pub-######"
   data-ad-slot="#######"
   data-ad-format="auto"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

Затем вы называете код AdSense в нижний вашей страницы (примечание не надо использовать "async" флаг при звонке adsbygoogle.js сценарий):

<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

Затем добавьте эту маленькую кода ниже:

<script>
if (!adsbygoogle.loaded) {
   // do something to alert the user
}
</script>

Adsense всегда создает/устанавливает флаг adsbygoogle.loaded к true Когда реклама загружена, вы можете поместить чек в функцию Settimeout, чтобы отложить чек на несколько секунд.

Несмотря на возраст этого вопроса, я недавно обнаружил, что он очень полезен, и поэтому могу только предположить, что другие все еще рассматривают его. Посмотрев сюда, а в других местах я предположил, что основные три проверки на стороне клиента на косвенное обнаружение блокировщика рекламы должны были проверить на наличие заблокированных div/img, заблокирован iframeS и заблокированные ресурсы (файлы JavaScript).

Может быть, он сверху или параноик, но охватывает системы блокировки рекламы, которые блокируют только один или два из выбора и, следовательно, не были покрыты, если бы вы сделали только одну проверку.

На странице вы запускаете чеки добавить: (я использую jQuery)

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="advertisement.js"></script>
<script type="text/javascript" src="abds.js"></script>

и добавьте следующее где -нибудь еще на странице:

<div id="myTestAd"><img src="http://placehold.it/300x250/000000/ffffff.png&text=Advert" /></div>

Я использовал Div с именем приманки, а также с внешне размещенным изображением с текстом «реклама» и в измерениях, используемых Adsense (благодаря Placehold.it!).

В advertisement.js Вы должны добавить что -то к документу, который мы можем проверить позже. Хотя кажется, что вы делаете то же самое, что и раньше, вы фактически проверяете файл (advertisement.js) сам загружается, а не выход.

$(document).ready(
{

    $("body").append("<div id=\"myTestAd2\">check</div>");

});

И затем скрипт обнаружения блокировщика рекламы, который сочетает все

$(document).ready(function()
{
    var ifr = '<iframe id="adServer" src="http://ads.google.com/adserver/adlogger_tracker.php" width="300" height="300"></iframe>';
    $("body").append(ifr);
});

$(window).on("load",function()
{

    var atb = $("#myTestAd");
    var atb2= $("#myTestAd2");
    var ifr = $("#adServer");

    setTimeout(function()
    {

        if( (atb.height()==0) ||
            (atb.filter(":visible").length==0) ||
            (atb.filter(":hidden").length>0) ||
            (atb.is("hidden")) ||
            (atb.css("visibility")=="hidden") ||
            (atb.css("display")=="none") ||
            (atb2.html()!="check") ||
            (ifr.height()!=300) ||
            (ifr.width()!=300) )
        {
            alert("You're using ad blocker you normal person, you!");
        }

    },500);

});

Когда документ готовы, Т.е. разметка загружается, мы также добавляем iframe в документ. Затем, когда окно загружен, т.е. контент вкл. изображения и т. д. загружаются, мы проверяем:

  • Размеры и видимость первого теста Div.
  • Что содержание второго тестового div является «проверкой», как это было бы, если бы advertimsent.js был нет заблокированный.
  • Размеры (и я думаю, что видимость, как скрытый объект, не имеет высоты или ширины?) Iframe

И стили:

div#myTestAd, iframe#adServer
{
    display: block;
    position: absolute;
    left: -9999px;
    top: -9999px;
}

div#myTestAd2
{
    display: none;
}

Надеюсь это поможет

Большинство Adblocker отмените http -запрос на ads.js и сделать 0px для элемента, но когда -нибудь adblocker удалил DOM, и какой -то ответ выше потерпит неудачу, потому что не проверяет существование элемента.

С использованием setTimeout() это хорошая практика, потому что без него сделает сценарий с помощью Adblocker.

Приведенный ниже скрипт проверит, существует ли DOM/удален и проверяет offsetHeight элемента, если он существует.

setTimeout(function() {
  var a = document.querySelector('.showads'),
    b = a ? (a.offsetHeight ? false : true) : true;
  console.log('ads blocked?', b)
}, 200); // don't too fast or will make the result wrong.
<div class="ads showads">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>

Я знаю, что на это уже отвечает, но я посмотрел на предложенный сайт образца, и я вижу, что они делают это так:

<script type="text/javascript">
if(document.getElementsByTagName("iframe").item(0) == null) {
    document.write("<div style="width: 160px; height: 600px; padding-top: 280px; margin-left: 5px; border: 1px solid #666666; color: #FFF; background-color: #666; text-align:center; font-family: Maven Pro, century gothic, arial, helvetica, sans-serif; padding-left: 5px; padding-right: 5px; border-radius: 7px; font-size: 18px;">Advertising seems to be blocked by your browser.<br><br><span style="font-size: 12px;">Please notice that advertising helps us to host the project.<br><br>If you find these ads intrusive or inappropriate, please contact me.</span><br><img src="http://www.playonlinux.com/images/abp.png" alt="Adblock Plus"></div>");
};
</script>

Нет необходимости в тайм-аутах и прослушивании DOM.Просто попробуйте загрузить скрипт из популярных рекламных сетей и посмотрите, перехватил ли блокировщик рекламы HTTP-запрос.

/**
 * Attempt to load a script from a popular ad network. Ad blockers will intercept the HTTP request.
 *
 * @param {string} url
 * @param {Function} cb
 */
function detectAdBlockerAsync(url, cb){
    var script = document.createElement('script');

    script.onerror = function(){
        script.onerror = null;
        document.body.removeChild(script);
        cb();
    }

    script.src = url;
    document.body.appendChild(script);
}

detectAdBlockerAsync('http://ads.pubmatic.com/AdServer/js/gshowad.js', function(){
    document.body.style.background = '#c00';
});

Только что создал свой собственный «плагин» для решения этого, и он работает очень хорошо:

adbuddy + jsbuddy:

Adbuddy Jsbuddy Github

Я добавил мобильную совместимость и обнаружение JSblocking среди прочего ... (как наложение, которое показано пользователям, просящим их отключить Adblocking/JSblocking программного обеспечения); Также сделал это отзывчивым дружелюбным.

Это открыто под Лицензия кошельков.

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>var adb=true;</script>
<script src="./getbanner.cfm?"></script>
<script>
$(document).ready(function(){if(adb)alert('AdBlock!');});
</script>

и в файле getbanner.cfm:

adb = false;

Я думаю, что это самый простой способ обнаружить Adblock.

Это то, что сработало для меня:

function isAdBlocked() {
     return (typeof(window.google_jobrunner) === "undefined") ? true : false;
}

$(document).ready(function(){
    if(isAdBlocked()) {
       alert('Y U NO LIKE ADS?');
    }
});

timing's Ответ хороший думал, но больше не работает, поэтому я обновил имя файла JS, чтобы «AdSense» из «рекламы», и он работает как очарование!

Вот код, может быть, это поможет кому -то:

<html>
      <head>
            <script src="/adsense.js"></script>
      </head>
             <body>
                   <script>
                           if( window.adblockDetecter === undefined ){
                           // Do anithing, adblocker detected!
                           alert('Adblocker Detected!');}
                   </script>
            </body>
</html>

В файле JS поместите только эту строку: var adblockDetecter = true;

Теперь есть лучший способ сделать это с помощью простого сценария JS под названием Детектор Adblock
Вот как его использовать:
Добавьте это в свой <head> раздел:

<script type="text/javascript">
window.onload = function() {
var iframe = document.createElement('iframe'),
    randomDomain = Math.floor(Math.random() * (10000 - 100 + 1)) + 100,
    iframeLoaded = true;

iframe.src = "http://"+ randomDomain +".com/ads.html";
iframe.height = ".1px";
iframe.width = ".1px";
iframe.id = 'some-ad';
iframe.onload = function() {iframeLoaded = false;};

document.body.appendChild(iframe);

setTimeout(function() { 
    var someAd = document.getElementById('some-ad');
    if(!iframeLoaded ||
       someAd == null || 
       someAd.style.display == "none" || 
       someAd.style.display == "hidden" || 
       someAd.style.visibility == "hidden" || 
       someAd.offsetHeight == 0)
        document.getElementById('ab-message').style.display = 'block';
    someAd.remove();
}, 500);
};
</script>`<br>

Теперь вы можете использовать ab-message Идентификатор, где бы вы ни хотели отобразить сообщение пользователям Adblock:

<div id="ab-message" style="display: none">Your message here!</div>

Обратите внимание на встроенный стиль, добавленный, чтобы скрыть его изначально (конечно, вы также можете сделать это из своего собственного файла CSS).
Также обратите внимание, что это занимает 500 мс, это потому, что он должен ждать, пока Adblocker сделает свое дело, иначе это не сработает.

Небольшое объяснение того, как работает этот сценарий

Во -первых, он добавляет iframe с источником случайно сгенерированной ссылки. (Это случайным образом генерируется, потому что некоторые Adblocks умны, в какой -то момент они понимают, что ссылка подделка).
Затем он запускает несколько проверок на этом iframe (если он был успешно загружен или если его стиль был изменен). Если один из этих тестов верен, он отображает ab-message Элемент для пользователей Adblock.

Этот скрипт работает для большинства (если не всех) блокировщиков рекламы.

ДОПОЛНИТЕЛЬНЫЙ

Никакой смысл, на самом деле, мог бы только что создать суть, но вместо этого я создал проект GitHub, но все же проверьте его и снимает его, если он поможет вам.
Абдектор: простой детектор adblock vanilla javascript.
Наслаждаться.

Вы можете проверить это, это может помочьОбнаружение-адблакер

Это реализация время ответа

Добавьте это перед каким -либо сценарием в теге головы:

<head>
    <title></title>
    <meta/>

    <!--adBlocker detection code - START-->
    <script src="//adblocker.fortiapp.com/ads.js"></script>
    <script>
        (function (i, o, g, r) {
            i[o] = (typeof i[o] == typeof undefined) ? g : r
        })(window, 'adblocker', true, false);
    </script>
    <!--adBlocker detection code - END-->

    // Other scripts

</head>

Затем потом используйте его:

if (adblocker) {
    // the add blocker is enabled
}else{
    // ad blocker is not enabled
}

Все приведенные выше ответы действительны, однако большинство не будут работать для блокировки рекламы на уровне DNS.

Рекламные блокировщики на уровне DNS (например пи) в основном возвращает nxdomain (домен не существует) для списка доменов блокировки рекламы (например, телеметрия.microsoft.com "не существует", когда это произойдет).

Есть несколько способов обойти это:

Метод а: Запрос на рекламу по IP -адресу, а не домену.

Этот метод немного раздражает, так как вам придется отслеживать IP -адреса. Это будет проблематично, если ваш код плохо поддерживается или регулярно обновляется.

Метод б: Блокировать все Запрашивает, что сбой- даже если клиент сообщает о nxdomain.

Это будет очень раздражает для пользователей, если это «законное» nxdomain.

Я понимаю ваше напряжение, и вы можете проверить, скрыт ли элемент сценарием или элементом. И если мы говорим о блокировке рекламы, вы можете учитывать только на видимость элемента, а не на присутствии элемента.

Элемент, созданный с помощью стороннего сценария, никогда не будет присутствовать, что если сценарий не может быть достижимы в данный момент (ошибка DNS, ошибка удаленного веб-сервера, предварительная загрузка веб-страницы и т. Д.), И вы всегда будете получать ложные положительные.

Все остальные ответы с чеками верны, но имейте это в виду.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top