2009-07-26 7 views
13

Hace poco estuve visitando a site y noté que la página tenía una sección que decía que notó que estaba usando el software AdBlocking y que podría apagarlo para ayudar a soportar un sitio pequeño como ese. Me preguntaba cómo harías eso? ¿Sería mejor hacerlo desde el lado del cliente o del lado del servidor?¿Detecta el software AdBlocking?

+8

estoy bastante Seguro que solo es posible desde el lado del cliente ... – luiscubal

+0

En realidad, creo que de alguna manera también puedes hacerlo desde el lado del servidor. Si sabe qué bloque de anuncios ** va a bloquear, el usuario no lo cargará. Usted puede saber que no estaba cargado entonces. Pero es una forma bastante costosa de detectarlo. –

Respuesta

30

Esto es algo que simplemente no se puede hacer del lado del servidor - no hay nada de nada razón de persona a llamar a su puerta y diga "¡Mírenme, tengo AdblockPlus!". En el lado del cliente, adblock está intentando influir activamente en el contenido de la página, que es algo que puede ver que ocurre y que están usando un bloqueador de anuncios.

De todos modos, sabía que newgrounds.com también lo está haciendo. (su nuevo diseño se arruinó para los usuarios de Adblock plus; como respuesta hicieron un concurso al mejor "si no nos va a ayudar a través de nuestros anuncios, vaya y compre algo en la tienda" -banner.

una mirada rápida en la fuente de newgrounds me dijo que están haciendo esto con algunos simples Javascript en primer lugar, en el documento:.

var user_is_leecher = true;

a continuación es una etiqueta de script externo: src=checkabp?thisistotrickabp=***adress of ad affilliate***

Ahora el broma: simplemente confían en adblock plus para filtrar esa scri pto, ya que todo lo que hay allí es: user_is_leecher = false;

Desde allí, pueden hacer casi cualquier cosa.

2

Supongo que hay varias maneras de hacerlo, pero probablemente la más fácil sería tener algún tipo de imagen de fondo, o texto, que se reemplazará cuando se cargue el anuncio. Por lo tanto, si el anuncio se carga, verá el anuncio. Si el anuncio no se carga, verá el texto.

Este ejemplo sería del lado del cliente, hecho por JavaScript o simplemente CSS podría ser suficiente.

Puede haber algunos trucos del lado del servidor que podrían hacer esto también, pero serían innecesariamente complicados y torpes. Un método que me viene a la mente incluiría algún tipo de API con el anunciante al que se le podría preguntar "¿acaso el usuario de una IP así cargó alguna imagen?" y de esa manera obtener la respuesta. Pero dudo que haya tales servicios, sería mucho más fácil hacerlo en el lado del cliente.

3

Podría hacerlo en el lado del servidor combinando las solicitudes de páginas html y de los anuncios de anuncios (probablemente con algunos identificadores únicos para cada solicitud ...) ... Pero esto es sólo una idea, nunca lo he intentado y nunca lo ha visto usado.

3

me encontré con esta parte del código que parece ser similar cómo lo hicieron:

/*MOOTOOLS*/ 
window.addEvent('domready', function(){ 

$$('.cat-item').each(function(el) { 
    var fx = new Fx.Morph(el,{ duration:300, link:'cancel' }); 
     el.addEvents({ 
     'mouseenter': function() { fx.start({ 'padding-left': 25 }); }, 
     'mouseleave': function() { fx.start({ 'padding-left': 15 }); } 
     }); 
    }); 

    if ($$(".google-sense468")[0] && $$(".google-sense468")[0].clientHeight == 0 && $('block-warning')) $('block-warning').setStyle('display','block'); 

}); 
/*MOOTOOLS END*/ 
1

No creo que haya una manera fácil de hacerlo. Lo que puedes hacer es crear "trampa". Haga un script php para escuchar una url muy obvia como yourdomain.com/ad.png. Probablemente pueda lograr esto mediante la reescritura de URL. Si esta página está cargada, puede observar esto en una variable de sesión y enviar de regreso un png en blanco de 1x1.

En la próxima solicitud, puede ver si se ha cargado ad.png. Si no lo has hecho, puedes adivinar que el cliente está usando alguna forma de software AdBlock. Asegúrese de establecer los encabezados http apropiados para evitar que los clientes almacenen en la memoria caché "ad.png".

Este es el único enfoque del lado del servidor que se me ocurre en este momento y tiene algunos defectos.

  • el archivo PNG puede almacenar en caché sin tener en cuenta las cabeceras http
  • Esto no funcionará para la primera solicitud HTTP
  • Algunos carga del servidor adicional como los navegadores le dejan de golpear ad.png para cada solicitud
  • que la imagen se carga desde el servidor no es garantía de que en realidad está mostrando
  • probablemente más efectos secundarios que no he pensado en

Por favor, haga un comentario en esta publicación si decide probarlo.

En cuanto a una solución del lado del cliente. Esto no debería ser tan difícil. Puede crear un pequeño Javascript para ejecutar en la carga de la página completa. Este script puede verificar que la página contiene los dom-nodes que contienen los anuncios. Si esto, cuando la página se carga por completo (no solo el dom), puede verificar el ancho y alto de las imágenes de sus anuncios. El inconveniente más obvio con esta solución es que los clientes pueden desactivar javascripts.

+0

Este método funciona y es mejor con una regla de reescritura para hacer que sea descartable (por ejemplo,/adverts/ .png) para su imagen 1px y señalarlo a un script que DESACTIVA una variable de sesión preestablecida y sirve la imagen como se esperaba. Haga esto bien al principio de un diseño (antes de cualquier cosa importante) y puede elegir qué servir en otro lugar. Funciona bien (incluso en las primeras solicitudes). Tienes que elegir una regla que definitivamente será atrapada y eliminada ... Los usuarios inteligentes también pueden incluir una lista blanca de tu anuncio, aunque no hay nada en la fuente que sugiera que lo hagan. –

1

Unas buenas respuestas aquí, así que sólo voy a añadir esto:

utilizan algún sistema de gestión de publicidad (usted puede escribir su propia). Con eso, rastrear cada anuncio que se muestra (y hacerlo obvio, como ads.php o showad.php o lo que sea). Si nunca se llama a esa secuencia de comandos, el usuario está utilizando ALGUNA forma de software de bloqueo de anuncios.

Asegúrese de manejar todos y cada uno de los anuncios a través de ese controlador. Mod_Rewrite no es necesario, se puede hacer usando PHP simple.

5

Todos los métodos mencionados aquí dependen de los bloqueadores de anuncios para quitar el código. Esto no funciona para algunos adblockers (como NetBarrier en Mac). También debes seguir actualizando tu código cuando los adblockers se pongan al día.

Para detectar si el usuario está bloqueando 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 que para los anuncios de Google Adsense:

if(typeof(window.google_render_ad)=="undefined") 
{ 
    //They're blocking ads, do something else. 
} 

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

+0

Al principio parecía una buena solución, pero cuando la probé no funcionó como se esperaba. A veces el navegador ejecuta esa secuencia de comandos antes del código adsende y termino ocultando mis propios anuncios :( –

+1

Quizás asegurarse de que el código no se ejecute hasta que todo haya terminado de cargarse solucionaría su problema: 'window.onload = function() { \t si (typeof (window.google_render_ad) == "indefinido") \t { \t // están bloqueando anuncios, hacer otra cosa. \t}} ' – Beau

1

Creo que es mucho más fácil que hacerlo en el lado del cliente que en el lado del servidor. Los bloqueadores de anuncios están instalados en el cliente, por lo que pueden manipular el DOM y bloquear las solicitudes ajax. Es por eso que creo que tiene más sentido detectar en el cliente que en el servidor.

De todos modos, este es un simple plugin independiente que detecta los usuarios con bloqueadores de anuncios habilitados, es de código abierto y el código completo es en github:

https://github.com/retargetly/mockingbird

Es más editor orientado para que puedan mostrar fácilmente mensajes en los contenedores de anuncios o en una ventana emergente. El complemento se actualiza con frecuencia y vale la pena intentarlo.Este es el violín también:

http://jsfiddle.net/retargetly/9vsha32h/

El único método necesita utilizar es

mockingbird.adsBlocked(Obj) 

La llamada se puede hacer en cualquier parte del código y que no necesitan jQuery para hacer que funcione .

¡Te deseo suerte!

0

Lo que puede hacer para detectar la AdBlocker en el lado del servidor es somithing como:

<?php 

    header('Content-Type: application/javascript'); 

    //Save it to session 
    session_start(); 
    $_SESSION['noAdblocker']=true; 

?> 

noAdblocker=true; 

Guardar este archivo como ads.php

Ahora el index.php:

<?php 
    session_start(); 
    $_SESSION['noAdblocker']=false; 
?> 
<!DOCTYPE HTML><html><head> 
    <!-- Now place the "ad-script" --> 
    <script src="ads.php"></script> 
</head><body></body></html>