Domanda

Sono stato di recente in visita un sito e ho notato che la pagina aveva una sezione che diceva che avevo notato che stavo utilizzando il software AdBlocking e potevo gentilmente disattivarlo per aiutare a supportare un piccolo sito come quello.Mi stavo solo chiedendo come lo faresti?Sarebbe meglio farlo lato client o lato server?

È stato utile?

Soluzione

Questa è una cosa che semplicemente non può essere fatto lato server - non c'è niente di niente ragione di persona a bussare alla tua porta e dire "Guardami, ho AdBlockPlus!". Quando sul lato client, AdBlock sta attivamente cercando di influenzare il contenuto della pagina, che è qualcosa che si può vedere accadere e vedere che stanno utilizzando un adblocker.

In ogni caso, mi è capitato di sapere che newgrounds.com sta facendo anche questo. (Il loro nuovo layout è stato avvitato su per Adblock Plus utenti -. Come risposta hanno fatto un concorso per il miglior "se non avete intenzione di aiutare noi attraverso i nostri annunci, andare a comprare qualcosa nel negozio" banner di

Una rapida occhiata nella fonte di Newgrounds mi ha detto che stanno facendo questo con qualche semplice javascript. In primo luogo nel documento:

var user_is_leecher = true;

Avanti c'è un tag script esterno: src=checkabp?thisistotrickabp=***adress of ad affilliate***

Ora la battuta: semplicemente fidarsi Adblock Plus per filtrare lo script fuori, come tutto ciò che c'è dentro è: user_is_leecher = false;

Da lì, si può fare qualsiasi cosa.

Altri suggerimenti

Tutti spenti i metodi qui menzionati si basano sui blocchi di annunci per togliere codice. Questo non funziona per alcuni adblockers (come NetBarrier su Mac). Hai anche a mantenere l'aggiornamento del codice quando i adblockers prendere piede.

Per rilevare se l'utente sta bloccando gli annunci, tutto quello che dovete fare è trovare una funzione nella pubblicità JavaScript e prova di prova per esso. Non importa quale metodo si sta utilizzando per bloccare l'annuncio. Ecco come si presenta per gli annunci di Google Adsense:

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

Questo metodo è descritto qui: http: // www. metamorphosite.com/detect-web-popup-blocker-software-adblock-spam

Si potrebbe fare sul lato server accoppiando le richieste di pagine HTML e per gli annunci di tronchi con (probabilmente con alcuni identificatori univoci per ogni richiesta ...) ... ma questo è solo un'idea, non ho mai provato e mai visto in passato.

Ho trovato questa parte nel codice che sembra assomigliare come lo hanno fatto:

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

Credo che ci sono diversi modi di farlo, ma probabilmente il più semplice sarebbe quella di avere un qualche tipo immagine di sfondo, o il testo di, che verrà sostituito quando l'annuncio viene caricato. Così, se l'annuncio viene caricato, si vede l'annuncio. Se l'annuncio non viene caricato, si vede il testo.

Questo esempio potrebbe essere lato client, fatto da JavaScript o semplicemente CSS potrebbe anche bastare.

Ci potrebbero essere alcuni espedienti lato server che potrebbero fare anche questo, ma sarebbe inutilmente elaborato e goffo. Un metodo che viene in mente dovrebbe includere una sorta di API con l'inserzionista che potrebbe essere chiesto "ha fatto l'utente dal carico such.and.such IP le immagini?" e in questo modo ottenere la risposta. Ma dubito ci sia tali servizi - sarebbe molto più facile da fare sul lato client

.

Credo che sia molto più facile per farlo sul lato client che nel lato server. blocco della pubblicità sono installati sul client, in modo che possano manipolare DOM e le richieste di blocco Ajax. Ecco perché credo che ha più senso per rilevare sul client che sul server.

In ogni caso, si tratta di un semplice plugin standalone che rileva gli utenti con blocco della pubblicità abilitati, è open-source e il codice completo è su GitHub:

https://github.com/retargetly/mockingbird

E 'più editore orientato in modo da poter mostrare facilmente i messaggi sugli annunci contenitori o in un pop-up. Il plugin è aggiornato di frequente, e vale la pena di provare. Questo è il violino anche:

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

L'unico metodo è necessario utilizzare è

mockingbird.adsBlocked(Obj)

La chiamata può essere effettuata in qualsiasi parte del codice e non è necessario jQuery per farlo funzionare.

auguro buona fortuna!

Non penso che ci sia un modo semplice per farlo.Quello che puoi fare è creare una "trappola".Fai in modo che uno script php ascolti un URL molto ovvio come tuodominio.com/ad.png.Probabilmente puoi ottenere questo risultato riscrivendo l'URL.Se questa pagina viene caricata, puoi annotarlo in una variabile di sessione e inviare indietro un png vuoto 1x1.

Alla prossima richiesta potrai vedere se ad.png è stato caricato.In caso contrario, puoi supporre che il client stia utilizzando una qualche forma di software AdBlock.Assicurati di impostare le intestazioni http appropriate per impedire ai client di memorizzare nella cache "ad.png".

Questo è l'unico approccio lato server che mi viene in mente al momento e presenta alcuni difetti.

  • Il file png può essere memorizzato nella cache indipendentemente dalle intestazioni http
  • Questo non funzionerà per la prima richiesta http
  • Un po' di carico aggiuntivo sul server poiché i browser continueranno a premere ad.png per ogni richiesta
  • Il fatto che l'immagine venga caricata dal server non garantisce che venga effettivamente visualizzata
  • Probabilmente altri effetti collaterali a cui non avevo pensato

Per favore lascia un commento su questo post se decidi di provarlo.

Per quanto riguarda una soluzione lato client.Questo non dovrebbe essere troppo difficile.Puoi creare un piccolo Javascript da eseguire al completamento del caricamento della pagina.Questo script può verificare che la pagina contenga i nodi dom che contengono gli annunci.Se lo fai quando la pagina viene caricata completamente (non solo il dom) puoi controllare la larghezza e l'altezza delle immagini dell'annuncio.Lo svantaggio più evidente di questa soluzione è che i client possono disabilitare i javascript.

Alcune buone risposte qui, quindi mi limiterò a aggiungi a:

usare qualche sistema di gestione degli annunci (si può scrivere il proprio). Con questo, tenere traccia di ogni annuncio che viene visualizzato (e renderlo evidente, come ads.php o showad.php o qualsiasi altra cosa). Se lo script non viene mai chiamata, l'utente sta utilizzando una qualche forma di annuncio software di blocco.

Assicurati di gestire ogni annuncio attraverso tale gestore, però. Mod_rewrite non è richiesto, può essere fatto utilizzando semplici PHP.

Che cosa si può fare per rilevare l'adblocker sul lato server è somithing come:

<?php

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

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

 ?>

 noAdblocker=true;

Salvare il file come ads.php

Ora la 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top