2009-07-26 9 views
13

Niedawno odwiedziłem stronę a site i zauważyłem, że na stronie znajduje się sekcja, która mówi, że zauważyła, że ​​korzystam z oprogramowania AdBlocking i czy mogę ją wyłączyć, aby pomóc w obsłudze małej witryny. Zastanawiałem się, jak to zrobiłeś? Czy najlepiej byłoby zrobić to po stronie klienta lub po stronie serwera?Wykrywanie oprogramowania AdBlocking?

+8

Ja dość pewnie to tylko możliwe po stronie klienta ... – luiscubal

+0

Właściwie, myślę, że możesz jakoś to zrobić również po stronie serwera. Jeśli wiesz, jaki blok ** ** zostanie zablokowany, nie zostanie załadowany przez użytkownika. Możesz wiedzieć, że nie był wtedy załadowany. Ale jest to dość drogi sposób na wykrycie tego. –

Odpowiedz

30

To jest coś, że po prostu nie można zrobić po stronie serwera - nie ma zilch powód, dla osoby, która ma zapukać drzwi i powiedz "Spójrz na mnie, mam AdblockPlus!". Kiedy po stronie klienta, adblock aktywnie próbuje wpłynąć na zawartość strony, co jest czymś, co można zobaczyć i zobaczyć, że używa on adblockera.

W każdym razie, zdaję sobie sprawę, że newgrounds.com też to robi. (ich nowy układ został wkręcony dla adblock plus użytkowników - w odpowiedzi przygotowali konkurs na najlepsze "jeśli nie zamierzasz nam pomóc przez nasze reklamy, idź i kup coś w sklepie" -banner.

szybkie spojrzenie w źródle Newgrounds powiedział mi, że robią to z jakiegoś prostego javascript pierwszy w dokumencie.

var user_is_leecher = true;

Następny istnieje zewnętrzny tag script: src=checkabp?thisistotrickabp=***adress of ad affilliate***

teraz żart: oni po prostu ufają adblock plus, aby odfiltrować tego scri pt., ponieważ wszystko to jest: user_is_leecher = false;

Z tego miejsca mogą zrobić prawie wszystko.

2

Sądzę, że istnieje kilka sposobów na zrobienie tego, ale prawdopodobnie najłatwiej byłoby uzyskać obraz w tle lub tekst, który zostanie zastąpiony po załadowaniu reklamy. Tak więc, jeśli reklama zostanie wczytana, zobaczysz reklamę. Jeśli reklama się nie załaduje, zobaczysz tekst.

Ten przykład może być stroną klienta, wykonaną przez JavaScript lub po prostu zwykły CSS może nawet wystarczyć.

Może istnieć kilka sztuczek po stronie serwera, które mogą to również zrobić, ale będą niepotrzebnie rozbudowane i niezgrabne. Jedną z metod, która przychodzi na myśl, byłby jakiś rodzaj API z reklamodawcą, który mógłby zostać zapytany "czy użytkownik z IP taki i. Ładował jakiekolwiek obrazy?" i w ten sposób uzyskaj odpowiedź. Wątpię jednak, by istniały takie usługi - byłoby to o wiele łatwiejsze po stronie klienta.

3

Można to zrobić po stronie serwera, łącząc żądania stron html z reklamami (prawdopodobnie z unikalnymi identyfikatorami dla każdego żądania ...) ... Ale to tylko pomysł, nigdy nie próbowałem to i nigdy nie widziałem, żeby był używany.

3

znalazłem tę część w kodzie, który wydaje się wyglądać jak oni to zrobili:

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

Nie sądzę, jest łatwy sposób to zrobić. Możesz stworzyć "pułapkę". Nakieruj skrypt php na bardzo oczywisty URL, taki jak yourdomain.com/ad.png. Prawdopodobnie można to osiągnąć przez przepisanie adresu URL. Jeśli ta strona jest załadowana, możesz to zanotować w zmiennej sesji i odesłać puste png 1x1.

Przy następnej prośbie możesz sprawdzić, czy załadowano ad.png. Jeśli nie, możesz zgadnąć, że klient używa jakiejś formy oprogramowania AdBlock. Upewnij się, że ustawiłeś odpowiednie nagłówki HTTP, aby uniemożliwić klientom buforowanie "ad.png".

Jest to jedyne podejście, które może mi się przydać w danym momencie na serwerze i ma pewne wady.

  • pliku PNG mogą być przechowywane niezależnie od nagłówków
  • to nie będzie działać na pierwsze żądanie http
  • Niektóre dodatkowo obciążenie serwera jako przeglądarki będzie utrzymywać uderzanie ad.png dla każdego żądania
  • że obraz jest ładowany z serwera ma gwarancji, że faktycznie są wyświetlane
  • prawdopodobnie więcej skutków ubocznych, że nie pomyśleli o

Dodaj komentarz do tego posta, jeśli zdecydujesz się go wypróbować.

Odnośnie rozwiązania po stronie klienta. To nie powinno być trudne. Możesz utworzyć niewielki skrypt Javascript, który będzie działał po załadowaniu strony. Ten skrypt może sprawdzić, czy strona zawiera węzły-domeny trzymające reklamy. Jeśli to zrobisz, gdy strona zostanie całkowicie załadowana (nie tylko domena), możesz sprawdzić szerokość i wysokość swoich reklam. Najbardziej oczywistą wadą tego rozwiązania jest to, że klienci mogą wyłączać javascripts.

+0

Ta metoda działa i jest najlepsza z regułą przepisywania, aby umożliwić jej niekompatybilność (np./Reklamy/ .png) dla obrazu 1px i wskazać skryptowi, który ZAZNACZA wstępnie ustawioną zmienną sesji i wyświetla obraz zgodnie z oczekiwaniami. Zrób to dobrze na początku układu (zanim cokolwiek ważnego) i możesz wybrać, co chcesz podać w innym miejscu. Działa jak uczta (nawet przy pierwszych prośbach). Musisz wybrać regułę, która z pewnością zostanie złapana i usunięta przez ... Doświadczeni użytkownicy mogą również wymieniać na biało Twoją reklamę, chociaż w źródle nie byłoby niczego, co by sugerowało, że powinni! –

1

Kilka dobrych odpowiedzi tutaj, więc dodam tylko to:

użyć jakiś system zarządzania reklamami (Można pisać własne). Dzięki temu możesz śledzić każdą wyświetlaną reklamę (i uczynić ją oczywistą, np. Ads.php lub showad.php lub cokolwiek innego). Jeśli ten skrypt nigdy nie zostanie wywołany, użytkownik korzysta z NIEKTÓRYCH form oprogramowania blokującego reklamy.

Pamiętaj jednak, aby obsługiwać każdą reklamę za pośrednictwem tego programu obsługi. Mod_Rewrite nie jest wymagany, można to zrobić za pomocą prostego PHP.

5

Wszystkie metody tutaj wymienione polegają na blokerach reklam, aby usunąć kod. Nie działa to w przypadku niektórych reklam typu adBlocker (np. NetBarrier na Macu). Musisz także aktualizować swój kod, gdy złapią Cię adwokaci.

Aby wykryć, czy użytkownik blokuje reklamy, wystarczy znaleźć funkcję w javascriptie i spróbować przetestować. Nie ma znaczenia, z jakiej metody blokują reklamę. Oto jak to wygląda w przypadku reklam Google AdSense:

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

Ta metoda jest opisana tutaj: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam

+0

Na początku wyglądało to na dobre, ale kiedy przetestowałem to nie działało zgodnie z oczekiwaniami. Czasami przeglądarka wykonuje ten skrypt przed kodem adsende, a ja ukrywam własne reklamy :( –

+1

Być może upewnienie się, że kod nie zostanie uruchomiony, dopóki wszystko nie zakończy się wczytywanie, może rozwiązać problem: 'window.onload = function() { \t if (typeof (window.google_render_ad) == "niezdefiniowany") \t { \t // oni blokowanie reklam, zrób coś innego. \t} } ' – Beau

1

uważam, że o wiele łatwiej jest to zrobić po stronie klienta niż na stronie serwera. Reklamy blokujące są instalowane na kliencie, dzięki czemu mogą manipulować DOM i blokować żądania ajax. Dlatego uważam, że lepiej jest wykryć na kliencie niż na serwerze.

W każdym razie, jest to samodzielna prosty plugin, który wykrywa użytkownicy z blokery reklam włączona, to open-source i pełny kod znajduje się na github:

https://github.com/retargetly/mockingbird

To bardziej zorientowany więc można je łatwo pokazać wydawca wiadomości w kontenerach reklam lub w wyskakującym okienku. Wtyczka jest często aktualizowana i warto spróbować.To skrzypce również:

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

Jedyną metodą trzeba użyć jest

mockingbird.adsBlocked(Obj) 

Połączenie może być wykonane w dowolnym miejscu w kodzie i nie trzeba jQuery, aby pracować .

Życzę szczęścia!

0

Co można zrobić, aby wykryć AdBlocker na stronie serwera jest somithing jak:

<?php 

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

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

?> 

noAdblocker=true; 

zapisać ten plik jako ads.php

Teraz w 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> 
Powiązane problemy