Pregunta

Me gustaría ser capaz de detectar si el usuario está utilizando el bloqueo de publicidad de software cuando se visite mi sitio web.Si lo están usando, quiero mostrar un mensaje pidiendo que lo apague con el fin de apoyar el proyecto, como este sitio web no.

Si usted entrar a dicho sitio y el navegador tiene algún tipo de adblock software habilitado, entonces el sitio, en lugar de mostrar el real de los anuncios muestra una pequeña bandera de decirle a los usuarios que los ingresos por publicidad se utiliza para alojar el proyecto y que deben considerar la activación de Adblock desactivado.

Yo quiero hacer eso en mi página web, estoy usando los anuncios de adsense en él, ¿Cómo puedo hacer eso?

¿Fue útil?

Solución

Mi solución no es específica para una determinada red de anuncios y es muy liviano. Lo he estado ejecutando en producción durante algunos años. AdBlock bloquea todas las URL que contienen la palabra "anuncios". Entonces esto es lo que hice:

Agregué un pequeño archivo JS a mi raíz web con el nombre ads.js

Esta es la única línea de código en ese archivo

var canRunAds = true;

Entonces en algún lugar de mi página:

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

Archivos como anuncios están bloqueados por al menos estos adblockers en Chrome:

  • Listón
  • AdBlock Plus
  • AdBlock Pro
  • Ghostery

Actualización del 2019-02-15:

Se agregó Ghostery en la lista anterior porque la extensión ahora también bloquea las solicitudes a Ads.js. Muy útil. ¿Significa esto que Ghostery en realidad nos está ayudando a detectar el bloqueo de anuncios con su extensión?

No funciona con:

Badger de privacidad

Otros consejos

No es una respuesta directa, pero puse el mensaje detrás del anuncio para cargar ... en lugar de tratar de detectarlo, solo aparecería cuando el anuncio no.

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

Con jQuery:

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

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

Por supuesto, necesitaría tener una página de destino para AdBlockNotice.html, y la clase .mytadad necesita reflejar sus contenedores de anuncios reales. Pero esto debería funcionar.

EDITAR

Como recomienda td_nijboer, una mejor manera es usar el :hidden (o :visible, como uso a continuación) selector para que display: none también se verifica:

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...
    }
}

Por supuesto, ambos podrían combinarse en uno if bloque si lo desea.

Tenga en cuenta que visibility: hidden Tampoco será capturado por tampoco (donde se mantenga el espacio de diseño, pero el anuncio no es visible). Para verificar eso, se puede usar otro filtro:

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

Que le dará una variedad de elementos publicitarios que son "invisibles" (con cualquier otra persona que 0 ser un problema, en teoría).

No hay solicitudes adicionales. No hay bibliotecas externas. Simplemente JavaScript simple y simple:

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);

  • Crea un elemento con la clase ADSBOX (tal como se define como un elemento extraíble en el archivo de definición de AdBlock Plus)
  • Lo agregas al documento y después de un breve mientras lees su offsetheight
  • Si se instala AdBlock, el elemento no tendrá ninguna altura.

Crédito a Post de Christian Heilmann, Creo que es, con mucho, la mejor solución para detectar AdBlock.

La mayoría de los anuncios se cargan dinámicamente en JavaScript. Acabo de utilizar el evento OnError para detectar si el script AD podría cargarse o no. Parece funcionar.

Ejemplo con Googleads:

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

Esto también se puede usar en otros elementos para ver si un bloqueador de anuncios está bloqueando el contenido. Este método puede producir falsos positivos si los elementos remotos no existen o no se pueden alcanzar.

Para detectar si el usuario está bloqueando los anuncios, todo lo que tiene que hacer es encontrar una función en el anuncio de JavaScript e intentar probarlo. No importa qué método estén usando para bloquear el anuncio. Así es como se ve para los anuncios de Google Adsense:

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

Este método se describe aquí: http://www.metamorphospose.com/detect-web-popup-bloker-software-adblock-spam

Mi solución más fácil con jQuery es:

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

Advertisement.js solo no contiene nada. Cuando alguien usa AdBlock, falla y la función se llama.

Sé que ya hay suficientes respuestas, pero dado que esta pregunta aparece en Google que busca "Detect Adblock" en el tema, quería proporcionar una idea en caso de que esté No usar adsense.

Específicamente, con este ejemplo, puede detectar si se utiliza la lista AdBlock predeterminada proporcionada por Firefox AdBlock. Se aprovecha que en esta lista de bloques hay un elemento bloqueado con la ID de CSS #bottomAd. Si incluyo tal elemento en la página y pruebo su altura, sé si el bloqueo de anuncios está activo o no:

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

El resto se realiza a través del sospechoso de jQuery habitual:

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

Como se puede ver, estoy usando setTimeout con al menos un tiempo de espera de 1 m. He probado esto en varios navegadores y la mayoría de las veces, verificando directamente el elemento en ready siempre devolvió 0; No importa si el Adblocker estaba activo o no. Estaba teniendo dos ideas sobre esto: o la renderización aún no se había hecho o AdBlock aún no entró en acción. No me molesté en investigar más.

Mi consejo es: ¡no lo hagas!

Cualquier escenario en el que trates a las personas como "malhechores" dará como resultado que se defiendan.

Aquí está mi propuesta.

Coloque un pequeño mensaje discreto en la parte superior de la página (independientemente de si los anuncios están siendo bloqueados) con el texto I *totally* respect your right to block ads y un enlace a otra página/ventana emergente con derecho Read more ....

En la otra página, deje en claro que comprende que es su computadora y son libres de usar el bloqueo de anuncios.

También deja en claro de una manera no acuática Que el uso de estos bloqueadores le dificulta la entrega de contenido excelente (explicando por qué en detalle) y que, si bien prefiere que el bloqueo de anuncios no ocurra en su sitio, es totalmente su decisión. Concéntrese en los aspectos positivos de apagar el bloqueo.

Aquellos que se oponen con vehemencia a los anuncios ignorarán esto, pero nunca tuvieron la oportunidad de convencerlos de todos modos. Aquellos que son indiferentes bien pueden ser influenciados por su atractivo, ya que no están haciendo todo el asunto de "Déjame que me salgan bien o me llevaré la pelota y me iré a casa" que honestamente debería ser el dominio exclusivo de los niños de cinco años.

Recuerde, nadie se llevó una pistola en la cabeza y lo obligó a poner sus cosas en la red. Trate a sus lectores/usuarios con respeto y probablemente encontrará un buen número de ellos correspondirá.

Están utilizando el hecho de que el código de anuncios de Google crea un iframe con el ID "iframe". Entonces, siempre que aún no tenga algo en su página con esa identificación, esto también funcionaría para usted.

<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>

Noté que los comentarios anteriores usan Google Adsense como objeto para probar. Algunas páginas no usan Adsense, y usar el bloque de Adsense como prueba no es realmente una buena idea. Porque Adsense Block puede dañar su SEO. Aquí hay un ejemplo de cómo detecto por AdBlocker Clase bloqueada simple:

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" es una identificación que bloquea AdBlocker. Por lo tanto, verificarlo si es visible, puede detectar si AdBlocker está activado.

Simplemente agregue un pequeño script en su sitio:

var isAdsDisplayed = true;

Con nombre adsbygoogle.js

Entonces haz lo siguiente:

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

Encontró esta solución aquí

AdBlock parece bloquear la carga de archivos JavaScript de AdSense (etc.). Entonces, si está utilizando la versión asíncrona de los anuncios adsense, puede verificar si adsbygoogle es un Array. Esto debe verificarse después de unos segundos, ya que el guión asíncrono es ... asíncrono. Aquí hay un diseño preliminar:

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

Para aclarar, aquí hay un ejemplo de cómo se ve el código de anuncios asíncronos de Adsense:

<!-- 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>

Darse cuenta de adsbygoogle se inicializa como una matriz. los adsbygoogle.js La biblioteca cambia esta matriz a Object {push: ...} Cuando se ejecuta. Verificar el tipo de variable después de cierto tiempo puede decirle si se cargó el script.

Este enfoque que uso en mi sitio, tal vez lo encuentre útil. En mi opinión, es el más simple solución.

AdBlocker bloquea clases específicas y elementos HTML, al inspeccionar estos selectores de cualquier anuncio bloqueado en la consola de desarrolladores (todos están listados), puede ver qué elementos siempre se bloquearán.

Por ejemplo, solo inspeccione esta página de preguntas en StackOverflow y verá un montón de anuncios bloqueados.

Por ejemplo, cualquier elemento con bottom-ad La clase se bloquea automáticamente.

  1. Creé un elemento divente de divir con bottom-ad clase:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
  2. Después de las cargas de la página, simplemente verifique si este elemento está oculto. Usé jQuery, pero no dude en usar JavaScript:$('.bottom-ad').css('display') == "none" o incluso mejor usando $('.bottom-ad').is(':visible')

Si el valor es true, entonces AdBlocker está activo.

No necesita una solicitud HTTP adicional, simplemente puede calcular la altura de un ADD falso.

Por cierto, aquí hay un Lista llena coincidir con los elementos que los adblockers evitan renderizar.

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>

La forma segura es envolver sus anuncios dentro <div> y verifique la altura

<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);

Funciona con AdBlock Plus y Bluehell Firewall.

Una forma eficiente de verificar si hay un AdBlock: simplemente verifique si hay AdBlock habilitado tratando de activar la URL de los anuncios de Google. En caso afirmativo, ejecute Callback_has_adblock, si no, ejecute Callback_no_adblock. Esta solución cuesta una solicitud más, pero al menos funciona:

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();
    });
};

Esta solución funciona para todo tipo de anuncios, no solo Google Adsense.

Si usa el nuevo código AdSense, puede hacer una verificación fácil, sin recurrir a contenido o comprobaciones de CSS.

Coloque sus anuncios normales en su marcado:

<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>

Luego llamas al código de adsense al abajo de su página (nota no haga utilizar el "async" bandera al llamar al adsbygoogle.js guion):

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

Luego agregue este pequeño fragmento de código debajo de eso:

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

Adsense siempre crea/establece la bandera adsbygoogle.loaded a true Cuando se cargan los anuncios, puede colocar el cheque en una función SetTimeOut para retrasar la verificación en unos segundos.

A pesar de la edad de esta pregunta, recientemente lo encontré muy útil y, por lo tanto, solo puedo asumir que otros aún lo ven. Después de mirar aquí y en otro lugar, supuse que las tres verificaciones principales del lado del cliente para detectar indirectamente un bloqueador de anuncios debían verificar el bloqueo div/img, bloqueado iframeS y recursos bloqueados (archivos JavaScript).

Tal vez sea exagerado o paranoico, pero cubre los sistemas de bloqueo de anuncios que bloquean solo uno o dos de la selección y, por lo tanto, es posible que no haya sido cubierto si solo haya realizado el único cheque.

En la página está ejecutando los cheques Agregar: (estoy usando 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>

y agregue lo siguiente en cualquier otro lugar de la página:

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

Utilicé un DIV con un nombre de cebo, así como una imagen alojada externamente con el texto "anuncio" y en dimensiones utilizadas por AdSense (¡gracias a la tenencia de lugar.).

En advertisement.js Debe agregar algo al documento que podamos verificar más adelante. Aunque parece que está haciendo lo mismo que antes, en realidad está verificando el archivo (advertisement.js) se está cargando, no la salida.

$(document).ready(
{

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

});

Y luego el script de detección de bloqueador de anuncios que combina todo

$(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);

});

Cuando el documento es Listo, es decir, el marcado está cargado, también agregamos el iframe al documento. Entonces, cuando la ventana es cargado, es decir, el contenido incl. las imágenes, etc. se cargan, verificamos:

  • Las dimensiones y la visibilidad de la primera prueba div.
  • Que el contenido de la segunda prueba div es "verificar", como lo hubiera sido si el advertimsent.js estaba no obstruido.
  • Las dimensiones (¿y supongo que la visibilidad, como objeto oculto no tiene altura ni ancho?) Del iframe

Y los estilos:

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

div#myTestAd2
{
    display: none;
}

Espero que esto ayude

La mayoría de los adblocker cancelan la solicitud HTTP a ads.js y hacer 0px para el elemento pero en algún momento Adblocker eliminó el DOM, y alguna respuesta anterior fallará porque no verificar la existencia del elemento.

Usando setTimeout() Es una buena práctica porque sin ella, hará la carrera de guiones con Adblocker.

El script a continuación verificará si DOM existe/elimina y verificará offsetHeight de un elemento si existe.

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>

Sé que esto ya está respondido, pero miré el sitio de muestra sugerido, y veo que lo hacen así:

<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>

No hay necesidad de tiempos de espera y olfates de DOM. Simplemente intente cargar un script de las redes publicitarias populares y vea si el bloqueador de anuncios interceptó la solicitud 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';
});

Acabo de crear mi propio "complemento" para resolver esto y funciona muy bien:

AdBuddy + JSBuddy:

AdBuddy Jsbuddy Github

Agregué compatibilidad móvil y detección de bloqueo de JS entre otras cosas ... (como una superposición que se muestra a los usuarios que les piden que desactiven el ADBLOCKING/JSBLOKING software); También lo hizo responder.

Se abre de apertura bajo el Licencia de cafetería.

<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>

y en el archivo getbanner.cfm:

adb = false;

Creo que es la forma más fácil de detectar Adblock.

Esto es lo que funcionó para mí:

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

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

timing's la respuesta es agradable, pensó, pero no más de trabajo, así que he actualizado el nombre del archivo js para 'adsense' de los 'anuncios', y está trabajando como un encanto!

Aquí está el código, tal vez este factor ayuda a alguien:

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

En el archivo Js simplemente poner esta línea: var adblockDetecter = true;

Ahora hay una mejor manera de hacerlo usando un script JS simple llamado Detector de adblock
Aquí le mostramos cómo usarlo:
Agrega esto a tu <head> sección:

<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>

Ahora puedes usar el ab-message ID donde quiera mostrar un mensaje a los usuarios de AdBlock:

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

Tenga en cuenta el estilo en línea agregado para ocultarlo originalmente (por supuesto, también puede hacerlo desde su propio archivo CSS).
También tenga en cuenta que se necesitan 500 ms, es porque tiene que esperar a que el AdBlocker haga lo suyo o no funcionará.

Una pequeña explicación de cómo funciona este script

Primero, agrega un iframe con una fuente de un enlace generado al azar. (Se genera aleatoriamente porque algunos Adblocks son inteligentes, en algún momento, se dan cuenta de que un enlace es falso).
Luego ejecuta múltiples comprobaciones en ese iframe (si se cargó con éxito o si su estilo se modificó). Si una de estas pruebas es verdadera, muestra el ab-message Elemento a los usuarios de AdBlock.

Este script funciona para la mayoría (si no todos) bloqueadores de anuncios.

EXTRA

No tiene sentido, en realidad, podría haber creado una esencia, pero en su lugar creé un proyecto de GitHub, pero aún así, échale un vistazo y lo protagonice si te ayudó.
Abdetector: detector de adBlock JavaScript simple de vainilla.
Disfrutar.

Puedes ver esto, podría ayudardetectar adblocker

Es una implementación de respuesta de tiempo

Agregue esto antes de cualquier script en la etiqueta de cabeza:

<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>

Luego, más tarde úsalo:

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

Todas las respuestas anteriores son válidas, sin embargo, la mayoría no funcionará para el bloqueo de anuncios de nivel DNS.

Bloqueadores de anuncios de nivel DNS (como pihole) Básicamente devuelve nxdomain (el dominio no existe) para una lista de dominios de bloqueo de anuncios (por ejemplo, telemetría.microsoft.com "no existirá" cuando lo haga).

Hay algunas formas de eludir esto:

Método A: Solicitud de anuncios por dirección IP, no dominio.

Este método es un poco molesto, ya que tendría que realizar un seguimiento de las direcciones IP. Esto será problemático si su código no está bien mantenido o actualizado regularmente.

Método B: Bloquear todos Solicitudes que fallan, incluso si el cliente informa nxdomain.

Esto será muy molesto para los usuarios si es un nxdomain "legítimo".

Entiendo su tensión y puede verificar si el elemento ha sido creado por script o elemento está oculto. Y si hablamos sobre el bloqueo de anuncios, solo puede contar con la visibilidad del elemento, no en la presencia del elemento.

El elemento creado con script de terceros nunca estará presente, que si el script no se puede accesible en este momento (error DNS, error de servidor web remoto, precarga de la página web fuera de línea, etc.), y siempre obtendrá falsos positivos.

Todas las demás respuestas con cheques son correctas, pero tenga esto en cuenta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top