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?
Respuesta
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.
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.
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.
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*/
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.
Este método funciona y es mejor con una regla de reescritura para hacer que sea descartable (por ejemplo,/adverts/
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.
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
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 :( –
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
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!
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>
- 1. Detecta el compilador con #ifdef
- 2. Android - ¿Detecta el teclado visible?
- 3. ¿Cómo los pequeños parches de software corrigen el gran software?
- 4. ¿Detecta TestFlight?
- 5. Encontrar vulnerabilidades en el software
- 6. ¿Qué es el software obstinado?
- 7. JqTouch - Detecta el disparador para la animación
- 8. Gmail no detecta el campo de respuesta
- 9. ¿Detecta el número redondo en PHP?
- 10. ¿Detecta eficientemente el archivo jpeg dañado?
- 11. ¿Cómo se detecta el fraude por clic?
- 12. Detecta el navegador firefox con jquery
- 13. VB Detecta el tiempo de inactividad
- 14. El operador sobrecargado no se detecta
- 15. Eclipse no detecta el java instalado
- 16. ¿Detecta el archivo Drag'n'Drop en WPF?
- 17. ¿Detecta el uso de macro? (errno)
- 18. Crítica de software: software de código abierto
- 19. Software de seguimiento de software en línea
- 20. ¿Detecta IPv6 en PHP?
- 21. Snoop no detecta
- 22. ¿Perl detecta matrices?
- 23. ¿Detecta usuarios en línea?
- 24. ¿Detecta recursión infinita?
- 25. ¿Detecta modificaciones concurrentes?
- 26. Probando interrupciones de red en el software
- 27. ¿Cómo funciona el software de virtualización?
- 28. ¿Cómo evalúa la confiabilidad en el software?
- 29. ¿Por qué el software tiene EULA?
- 30. ¿Cómo validar el diseño del software?
estoy bastante Seguro que solo es posible desde el lado del cliente ... – luiscubal
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. –