[JavaScript] Detectar uso de AdBlock

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
Buenas a todos!!
byqF253.gif


Hoy os voy a explicar como detectar en nuestras paginas si un visitante está, o no, usando AdBlock, y como mostrar un mensaje alternativo a la publicidad. :mola:


Antes de nada, copiamos y guardamos en un fichero tal que "adblock.js" el siguiente codigo que usaremos para detectar el uso de AdBlock en nuestra pagina:
Código:
function createXMLHttpRequest(){ 
    try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {} 
    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} 
    try { return new XMLHttpRequest(); } catch(e) {} 
    alert("XMLHttpRequest no soportado"); 
    return null; 
} 
 
onload=function(){

	if (document.getElementsByClassName == undefined) {
		document.getElementsByClassName = function(className)
		{
			var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
			var allElements = document.getElementsByTagName("*");
			var results = [];

			var element;
			for (var i = 0; (element = allElements[i]) != null; i++) {
				var elementClass = element.className;
				if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
					results.push(element);
			}

			return results;
		}
	}

    blocked = 0; 	
	var ad_nodes = document.getElementsByClassName(ads);
	for(i in ad_nodes){
		if (ad_nodes[i].offsetHeight == 0){ 
			blocked = 1;
			ad_nodes[i].innerHTML = msg;
		}
	}
}
Pastebin : [JavaScript] foro20.com - Pastebin.com

Ahora, en nuestra pagina, tenemos que poner todos los anuncios dentro de un div con un atributo class comun, como por ejemplo :
Código:
<div class="div">	<!-- Hay que recordar lo que pongamos entre las comillas de class="" -->
<iframe src="http://track.adjal.com/BLABLABLABLA" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" width="300" height="250"></iframe>
</div>
Dentro de dicho es div es conveniente que no haya mas contenido que el anuncio en si. El resto del contenido fuera de dicho div, y en caso de haber mas anuncios, se ponen dentro de otro div con el mismo class.

Hecho esto, lo unico que queda es llamar al archivo "adblock.js" y pasarle un par de parametros. En nuestra plantilla, antes del </head>, añadimos el siguiente codigo :
Código:
<script type="text/javascript">
var ads = "div"; //Aqui ponemos el class que le hemos dado a todos los div con publi. En el caso de este ejemplo : div
var msg = '<img src="http://i.imgur.com/piJOXpq.jpg"/><br/><br/>Desactivalo, por favor ;)'; //Aqui el texto a mostrar en lugar de la publicidad</script>
<script src="adblocks.js" type="text/javascript"></script>

¡Y ya está! Cada vez que algun usuario con AdBlock activado entre a nuestra web verá el mensaje que hayamos indicado en la variable "msg".

DEMO : Bleed - Foro20


Me explico como un libro cerrado :roto2:, asi que ante cualquier duda dejad un comentario.


PD: En la demo tuve que poner anuncios de verdad para que los detecte al AdBlock. NO hacer click en ellos.
 
Última edición:

trademarkos

Cobre
Usuario de Bronce
Mensajes
862
Puntuación de reacción
2
Eso es lo que buscaba tío, llevo tiempo buscandolo, gracias por el aportazo, ahora haré click en todos los anuncios para agradecertelo ....

Es broma, no te rayes xDXD

Gracias ;)
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
En realidad me da igual que hagais click, @trademarkos. Son de Adjal, no de AdSense. xD

Ya os voy pasando por privado la direccion postal para que me envieis los jamones y las notas de agradecimiento. :roto2:
 

invicto992

Cobre
Usuario de Bronce
Mensajes
969
Puntuación de reacción
0
mejor sin instalar el script igual el que viene con su adb comparte la entrada en facebook o alguna red social xD
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
mejor sin instalar el script igual el que viene con su adb comparte la entrada en facebook o alguna red social xD

Eso ya a gusto de cada uno. :mola:

Lo que tambien puedes hacer es alojar los banners (la imagen) en tu propio servidor y el enlace acortarlo. Así adblock no lo detecta y no lo bloquea. :roto2:

PD: Tambien lo podeis usar para registrar con fines estadisticos cuantos visitantes recibis con adblock activado, no solo para mostrar mensajes en el lugar de la publicidad. ;)
 
Última edición:

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
Buena aporte!

Un par de cosas, si no me equivoco si a la variable mensaje le asignamos una redireción debería funcionar no?

Código:
setTimeout("location.href='http://otrolugar.com'", 100);}

¿Y este código es soportado por todos los navegadores? Digo esto porque tenía entendido que el JavaScript no es soportado en todos por igual, de ahí que haya librerías como jQuery.

Y otro truco que puede interesar para forzar un poco más al usuario a que quite el adBlock es hacer lo siguiente:

Añadir esto justo debajo de la etiqueta de apertura del body en el documento HTML:

HTML:
 <table id="adblock" style="display: none; ">
       <tbody>
            <tr>
               <td>
                   <p>¡QUITA EL ADBLOCK CAPULLO!</p>
               </td>
            </tr>
      </tbody>
</table>

Añadir los estilos:
HTML:
#adblock {
    position: fixed;
    left: 0px;
    top: 0px;
    width: 100%;
    height: 100%;
    z-index: 10000;
}

#adblock p {
    vertical-align: middle;
    text-align: center;
    background-color: #333;
    color: #fff;
    opacity: 0.95;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=95)";
    filter: alpha(opacity=95);
}

Y luego habría que añadir a la función msg que muestre esta tabla, en JavaScript no sé como se haría, en jQuery sería

HTML:
var msg = $("#adblock").show();

Saludos
 

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
Buena aporte!

Un par de cosas, si no me equivoco si a la variable mensaje le asignamos una redireción debería funcionar no?

Código:
setTimeout("location.href='http://otrolugar.com'", 100);}

No, creo que no funcionaria, ya que mas adelante estas cambiando el contenido de todos los <div> con el class señalado en la variable 'ads' por el contenido de la variable 'msg'. Concretamente es esta linea la que lo hace (dentro de un bucle for) : ad_nodes.innerHTML = msg;

Se podria modificar un poco para enviar al usuario a otra pagina, eso fijo. ;)


PD: En tal caso puede que así si:
Código:
var msg = '<script type="text/javascript">setTimeout("location.href='http://otrolugar.com'", 100);</script>';

¿Y este código es soportado por todos los navegadores? Digo esto porque tenía entendido que el JavaScript no es soportado en todos por igual, de ahí que haya librerías como jQuery.

Probado en Chrome y Firefox, y funciona correctamente. No he probado con otros navegadores. :mola:

Y otro truco que puede interesar para forzar un poco más al usuario a que quite el adBlock es hacer lo siguiente:

[...]

Y luego habría que añadir a la función msg que muestre esta tabla, en JavaScript no sé como se haría, en jQuery sería

HTML:
var msg = $("#adblock").show();

Saludos

Buen aporte tambien. :mola:

Usando "adblock" como ID, creo que seria :
Código:
adblock.style.display = "block";
Y para volver a ocultarlo :
Código:
adblock.style.display = "none";
 
Última edición:

lobogris

Platino
Usuario de Bronce
Mensajes
1,537
Puntuación de reacción
0
No, creo que no funcionaria, ya que mas adelante estas cambiando el contenido de todos los <div> con el class señalado en la variable 'ads' por el contenido de la variable 'msg'. Concretamente es esta linea la que lo hace (dentro de un bucle for) : ad_nodes.innerHTML = msg;

Se podria modificar un poco para enviar al usuario a otra pagina, eso fijo. ;)


PD: En tal caso puede que así si:
Código:
var msg = '<script type="text/javascript">setTimeout("location.href='http://otrolugar.com'", 100);</script>';


Entendido porque me lo has explicado xD sino...
Probado en Chrome y Firefox, y funciona correctamente. No he probado con otros navegadores. :mola:

Con IE8 no funciona parece... al menos probé desde browserstack y veo que ni se muestran los anuncios pero sí el espacio... tal vez tenga el JS desactivdo pero no recuerdo donde se activa en IE.
Buen aporte tambien. :mola:

Usando "adblock" como ID, creo que seria :
Código:
adblock.style.display = "block";
Y para volver a ocultarlo :
Código:
adblock.style.display = "none";

ok :), entonces ya no hariía falta definir el display none en el HTML
 

Rhazz

Platino
Usuario de Bronce
Mensajes
1,400
Puntuación de reacción
0
Genial el aporte, aunque creo que los de Adblock ya están adaptando la extensión a los bloqueadores de la misma, espero este truco funcione aún.
 
Mensajes
4
Puntuación de reacción
0
Hola yo he intentado hacerlo funcionar y no funciona, haber si me podeis hechar una mano. Gracias
 
Mensajes
4
Puntuación de reacción
0
Pero a ti te funciona?, el aporte no dudo que sea malo pero a mi no me funciona.
 
Última edición:
Arriba