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?
Odpowiedz
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.
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.
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.
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*/
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.
Ta metoda działa i jest najlepsza z regułą przepisywania, aby umożliwić jej niekompatybilność (np./Reklamy/
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.
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
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 :( –
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
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!
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>
- 1. Wykrywanie szkodliwego oprogramowania sygnatur
- 2. Przerwanie oprogramowania
- 3. Wdrażanie aktualizacji oprogramowania w wersji Beta i oprogramowania Sparkle
- 4. Wykrywanie przeglądarki a wykrywanie funkcji
- 5. Jak działa aktywacja oprogramowania?
- 6. Tryb renderowania oprogramowania - WPF
- 7. Opcje rozwoju oprogramowania komputerowego
- 8. Qt auto wersja oprogramowania?
- 9. Książki dotyczące architektury oprogramowania
- 10. Standardy bezpieczeństwa oprogramowania
- 11. Wsparcie starszego oprogramowania enquire.js
- 12. Symulacja oprogramowania komputera kwantowego
- 13. Wykrywanie częstotliwości w Pythonie
- 14. Wykrywanie linii | Wykrywanie kątów za pomocą Java
- 15. Wykrywanie przeciągnij i upuść + wykrywanie nie działa
- 16. Pokaż klawiaturę oprogramowania bez EditText
- 17. żadnego oprogramowania z CFbundleidentifier istnieje
- 18. Porównaj wersję oprogramowania w postgresie
- 19. jak używać watchdog oprogramowania linux
- 20. Obsługa obrazów podczas tworzenia oprogramowania
- 21. Wyszukiwanie umów na tworzenie oprogramowania
- 22. Oprogramowanie do śledzenia oprogramowania online
- 23. Uczenie się wbudowanego oprogramowania układowego
- 24. Unikanie przypadkowego nadpisania oprogramowania układowego
- 25. oprogramowania do rysowania danych naukowych
- 26. Co może przyspieszyć rozwój oprogramowania?
- 27. Ochrona oprogramowania dla małych dostawców
- 28. Testowanie oprogramowania pośredniego z Rspec
- 29. Dobra inżynieria oprogramowania a bezpieczeństwo
- 30. Dystrybucja oprogramowania w systemie Linux?
Ja dość pewnie to tylko możliwe po stronie klienta ... – luiscubal
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. –