Me gustaría poder detectar si el usuario está usando un software de bloqueo de anuncios cuando visita mi sitio web. Si lo están usando, quiero mostrar un mensaje pidiéndoles que lo apaguen para apoyar el proyecto, como lo hace este sitio web .
Si ingresa a ese sitio y su navegador tiene algún tipo de software adblock habilitado, entonces el sitio en lugar de mostrar los anuncios reales muestra un pequeño banner que le dice a los usuarios que los ingresos publicitarios se utilizan para alojar el proyecto y que deberían considerar desactivar Adblock .
Quiero hacer eso en mi sitio web, estoy usando anuncios de AdSense, ¿cómo puedo hacer eso?
Respuestas:
Mi solución no es específica para una determinada red publicitaria y es muy ligera. 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
Luego, en algún lugar de mi página:
Archivos como ads.js están bloqueados por al menos estos bloqueadores de anuncios en Chrome:
Actualización el 15/02/2019:
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 realmente nos está ayudando a los desarrolladores a detectar el bloqueo de anuncios con su extensión?
No funciona con:
Tejón de privacidad
fuente
js/ads.js
por favor? como estoy en blogger tuve que subir el.js
sitio (como: Google Drive) y el enlace en ese caso no contieneads
. Sería realmente útil si proporciona el enlace de su archivo.No es una respuesta directa, pero pondría el mensaje detrás del anuncio que se cargará ... en lugar de tratar de detectarlo, simplemente aparecerá cuando el anuncio no lo haga.
fuente
http://thepcspy.com/read/how_to_block_adblock/
Con jQuery:
Por supuesto, necesitaría tener una página de destino para AdblockNotice.html, y la clase .myTestAd debe reflejar sus contenedores de anuncios reales. Pero esto debería funcionar.
EDITAR
Como recomienda TD_Nijboer, una mejor manera es usar el selector
:hidden
(o:visible
, como uso a continuación) para quedisplay: none
también esté marcado:Por supuesto, ambos pueden combinarse en un
if
bloque si se desea.Tenga en cuenta que
visibility: hidden
tampoco será capturado por ninguno (donde permanece el espacio de diseño, pero el anuncio no es visible). Para verificar eso, se puede usar otro filtro:Lo que le dará una serie de elementos publicitarios que son "invisibles" (
0
en teoría, cualquiera puede ser mayor que un problema).fuente
Redirecting in this case is a bad idea. If your advertising service goes down, all visitors could be redirected to that page.
En efecto. Sin mencionar que simplemente lanzarían un guión simple para derrotar la contramedida. Además, ¿realmente crees que al ser agresivo y enérgico, los usuarios estarán motivados para desactivar sus bloqueadores de anuncios? No, todo lo que lograría sería cabrearlos y agriarlos contra su sitio. La mayoría de los sitios optan por mostrar simplemente un mensaje en lugar de mostrarse hostil.No hay solicitudes adicionales. No hay bibliotecas externas. Simplemente JavaScript simple:
El crédito a cargo de Christian Heilmann , creo que es, con mucho, la mejor solución para la detección de AdBlock.
fuente
testAd.style.display = 'absolute'
y quitarlo de la pantalla<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>
(por supuesto después de probar CSS debe cambiarse a<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
es unposition
valor.window.onload
funciónLa mayoría de los anuncios se cargan dinámicamente en javascript. Acabo de usar el evento onerror para detectar si el script del anuncio podría cargarse o no. Parece funcionar.
Ejemplo con GoogleAds:
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 puede alcanzar.
fuente
offsetHeight
Para detectar si el usuario está bloqueando los anuncios, todo lo que tiene que hacer es encontrar una función en el anuncio javascript e intentar probarlo. No importa qué método estén usando para bloquear el anuncio. Esto es lo que parece para los anuncios de Google Adsense:
Este método se describe aquí: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam
fuente
typeof
es una sobrecarga si verifica la propiedad del objeto. Uso sencillo=== undefined
.Mi solución más fácil con jquery es:
publicidad.js simplemente no contiene nada. Cuando alguien usa adblock, falla y se llama a la función.
fuente
Sé que ya hay suficientes respuestas, pero dado que esta pregunta aparece en Google buscó "detectar adblock" en el tema, quería proporcionar una idea en caso de que no esté usando AdSense .
Específicamente, con este ejemplo puede detectar si se utiliza la lista de Adblock predeterminada proporcionada por Firefox Adblock. Aprovecha que en esta lista de bloqueo hay un elemento bloqueado con la identificación CSS
#bottomAd
. Si incluyo dicho elemento en la página y pruebo su altura, sé si el bloqueo de anuncios está activo o no:El resto se realiza a través del sospechoso jQuery habitual:
Como se puede ver, estoy usando
setTimeout
con al menos un tiempo de espera de 1 ms. He probado esto en varios navegadores y la mayoría de las veces, comprobando directamente el elemento enready
siempre devuelve 0; sin importar si el bloqueador de anuncios estaba activo o no. Tenía dos ideas sobre esto: o el renderizado aún no se había realizado o Adblock aún no se había implementado. No me molesté en investigar más.fuente
.is(":hidden")
verificación depende de si tanto la altura como el ancho son cero. Si solo establece la altura en 0, pero el div aún ocupa un ancho, entonces jQuery no lo considera "oculto". Entonces, si puede decirlo,.is(":hidden")
depende en cierta medida de cómo el bloqueador de anuncios decida cambiar el tamaño / ocultar el contenido.Mi consejo es: ¡no lo hagas!
Cualquier escenario en el que trates a las personas como "malhechores" hará 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 se están bloqueando) con el texto
I *totally* respect your right to block ads
y un enlace a otra página / ventana emergente tituladaRead more ...
.En la otra página, deja en claro que entiendes que es su computadora y que son libres de usar el bloqueo de anuncios.
Además, deje en claro de manera no acusatoria que el uso de estos bloqueadores hace que sea más difícil para usted entregar un gran contenido (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 desactivar el bloqueo.
Aquellos que se oponen con vehemencia a los anuncios ignorarán esto, pero de todos modos nunca tuvo la oportunidad de convencerlos. Aquellos que son indiferentes pueden ser influenciados por su atractivo, ya que no están haciendo todo lo de "déjenme seguir o me llevaré mi pelota y me iré a casa" que honestamente debería ser el dominio exclusivo de niños de cinco años.
Recuerde, nadie le apuntó con un arma a la cabeza y lo obligó a poner sus cosas en la red. Trate a sus lectores / usuarios con respeto y probablemente encontrará que un buen número de ellos corresponderá.
fuente
Están utilizando el hecho de que el código de anuncios de Google crea un iframe con la identificación "iframe". Entonces, siempre que no tenga algo en su página con esa ID, esto también funcionaría para usted.
fuente
Simplemente agregue un pequeño script en su sitio:
Con el nombre adsbygoogle.js
Luego haz lo siguiente:
Encontré esta solución aquí
fuente
Noté que los comentarios anteriores usan Google Adsense como objeto para probar. Algunas páginas no usan adsense, y usar el bloque adsense como prueba no es realmente una buena idea. Porque el bloqueo de adsense puede dañar tu SEO. Aquí hay un ejemplo de cómo detecto por adblocker la clase simple bloqueada:
HTML:
Jquery:
"ablockercheck" es una ID que bloquea el bloqueador de anuncios. Entonces, verificando si está visible, puede detectar si el bloqueador de anuncios está activado.
fuente
AdBlock parece bloquear la carga de archivos JavaScript de AdSense (etc.). Por lo tanto, si está utilizando una versión asíncrona de anuncios de AdSense, puede verificar si
adsbygoogle
es unaArray
. Esto debe verificarse después de unos segundos ya que el script asincrónico es ... asincrónico. Aquí hay un bosquejo aproximado :Para aclarar, aquí hay un ejemplo de cómo se ve el código de anuncios asíncronos de AdSense:
Tenga en cuenta que
adsbygoogle
se inicializa como una matriz. Laadsbygoogle.js
biblioteca cambia esta matrizObject {push: ...}
cuando se ejecuta. Verificar el tipo de variable después de cierto tiempo puede decirle si se cargó el script.fuente
Este enfoque que uso en mi sitio, tal vez le sea útil. En mi opinión, es lo más simple. solución más .
AdBlocker bloquea clases específicas y elementos html, al inspeccionar estos selectores de cualquier anuncio bloqueado en la consola del desarrollador (todos están listados) puede ver qué elementos siempre estarán bloqueados.
Por ejemplo, simplemente inspeccione esta página de preguntas en stackoverflow y verá un montón de anuncios bloqueados.
Por ejemplo, cualquier elemento con
bottom-ad
clase se bloquea automáticamente.bottom-ad
clase:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
$('.bottom-ad').css('display') == "none"
o incluso mejor usando$('.bottom-ad').is(':visible')
Si el valor es
true
, entonces AdBlocker está activo.fuente
No necesita una solicitud HTTP adicional, simplemente puede calcular la altura de un anuncio falso.
Por cierto, aquí hay una lista completa que coincide con los elementos que los bloqueadores de anuncios evitan representar.
fuente
la manera segura es envolver sus anuncios dentro
<div>
y verificar la alturafunciona con adblock plus y firewall de bluehell.
fuente
Una forma eficiente de verificar si hay un bloque de anuncios: simplemente verifique si hay un bloque de anuncios habilitado intentando 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:
Esta solución funciona para todo tipo de anuncios, no solo google adsense.
fuente
A pesar de la antigüedad de esta pregunta, recientemente la encontré muy útil y, por lo tanto, solo puedo suponer que todavía hay otras personas que la están viendo. Después de buscar aquí y en otros lugares, supuse que las tres principales comprobaciones del lado del cliente para detectar indirectamente un bloqueador de anuncios eran para verificar si estaban bloqueadas
div
/img
bloqueadoiframe
s y los 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 se hayan cubierto si solo hubiera realizado una verificación.
En la página que está ejecutando, las comprobaciones agregan: (Estoy usando jQuery)
y agregue lo siguiente en cualquier otro lugar de la página:
Utilicé un div con un nombre de cebo, así como una imagen alojada externamente con el texto "Anuncio" y en las dimensiones utilizadas por AdSense (¡gracias a placehold.it!).
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 que el archivo (advertisement.js
) se cargue, no la salida.Y luego el script de detección de bloqueador de anuncios que combina todo
Cuando el documento está listo , es decir, se carga el marcado, también agregamos el iframe al documento. Luego, cuando se carga la ventana , es decir, el contenido incl. imágenes, etc. está cargado, verificamos:
advertimsent.js
era no bloqueado.Y los estilos:
Espero que esto ayude
fuente
Si usa el nuevo código de AdSense, puede hacer una verificación fácil, sin recurrir a las verificaciones de contenido o CSS.
Coloque sus anuncios normalmente en su marcado:
Luego, llama al código de AdSense en la parte inferior de tu página (ten en cuenta que no uses la
"async"
bandera cuando llames aladsbygoogle.js
script):Luego agregue este pequeño fragmento de código debajo de eso:
AdSense crea siempre / establece el indicador
adsbygoogle.loaded
detrue
cuando los anuncios se cargan, puede colocar el cheque en una función setTimeout para retrasar el cheque por unos segundos.fuente
La mayoría de los bloqueadores de anuncios cancelan la solicitud HTTP
ads.js
y realizan0px
el elemento, pero en algún momento el bloqueador de anuncios eliminó el DOM , y alguna respuesta anterior fallará porque no se verifica la existencia del elemento.El uso
setTimeout()
es una buena práctica porque sin él, el script correrá con adblocker.La secuencia de comandos a continuación verificará si dom existe / eliminado y verificará
offsetHeight
un elemento si existe.fuente
Todas las respuestas anteriores son válidas, sin embargo, la mayoría no funcionará para el bloqueo de anuncios a nivel DNS.
Bloqueadores de anuncios de nivel DNS (como pi-hole ) básicamente devuelven NXDOMAIN (el dominio no existe) para una lista de dominios de bloqueo de anuncios (por ejemplo, telemetry.microsoft.com "no existirá" cuando lo haga).
Hay algunas formas de evitar esto:
Método A : Solicitud de anuncios por dirección IP, no por dominio.
Este método es un poco molesto ya que tendría que hacer un seguimiento de las direcciones IP. Esto será problemático si su código no está bien mantenido o actualizado regularmente.
Método B : Bloquee todas las solicitudes que fallan, incluso si el cliente informa NXDOMAIN.
Esto será muy molesto para los usuarios si se trata de un NXDOMAIN "legítimo".
fuente
y en el archivo getbanner.cfm:
Creo que es la forma más fácil de detectar adblock.
fuente
true
siempreEsto es lo que funcionó para mí:
fuente
Sé que esto ya está respondido, pero miré el sitio de muestra sugerido y veo que lo hacen así:
fuente
No hay necesidad de tiempos de espera y detección de DOM. Simplemente intente cargar un script de redes publicitarias populares y vea si el bloqueador de anuncios interceptó la solicitud HTTP.
fuente
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 jsBlocking, entre otras cosas ... (como una superposición que se muestra a los usuarios pidiéndoles que deshabiliten el software adBlocking / jsBlocking ); También lo hizo receptivo amigable.
Está abierto bajo la licencia de Coffeeware .
fuente
Entiendo su tensión y puede verificar si el elemento ha sido creado por script o si el elemento está oculto. Y si hablamos de bloqueo de anuncios, puede contar solo con la visibilidad del elemento, no con la presencia del elemento.
El elemento creado con un script de terceros nunca estará presente, que si el script no es accesible en este momento (error de DNS, error del servidor web remoto, precarga de la página web fuera de línea, etc.), y siempre obtendrá un falso positivo.
Todas las demás respuestas con cheques son correctas, pero tenga esto en cuenta.
fuente
timing's
La respuesta es buena, pero ya no funciona, así que he actualizado el nombre del archivo js a 'adsense' de 'ads' y está funcionando como un encanto.Aquí está el código, tal vez esto ayude a alguien:
En el archivo Js pon solo esta línea:
var adblockDetecter = true;
fuente
Ahora hay una mejor manera de hacerlo usando un script JS simple llamado AdBlock Detector.
Aquí se explica cómo usarlo:
agregue esto a su
<head>
sección:Ahora puede usar la
ab-message
identificación donde desee mostrar un mensaje a los usuarios de AdBlock: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 tarda 500 ms, eso es porque tiene que esperar a que el bloqueador de anuncios 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 aleatoriamente. (Se genera aleatoriamente porque algunos bloques de anuncios 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ó correctamente o si se modificó su estilo). Si una de estas pruebas es verdadera, muestra el
ab-message
elemento para bloquear usuarios.Este script funciona para la mayoría (si no todos) los bloqueadores de anuncios.
EXTRA
No tiene sentido, realmente, podría haber creado una esencia, pero en su lugar, creé un proyecto de Github, pero aún así, échale un vistazo y ponlo en una estrella si te ayudó.
abDetector: Detector simple de JavaScript AdBlock de vainilla.
Disfrutar.
fuente
Puede verificar esto, podría ayudar a detectar-adblocker
Es una implementación de respuesta de tiempo
Agregue esto antes de cualquier secuencia de comandos en la etiqueta principal:
Luego, más tarde, úsalo:
fuente
window.adblocker
en la consola de su navegador si regresa,true
entonces adblocker está habilitado; de lo contrario, regresaráfalse
, puede verificar la documentación completa detect-adblocker