Ich möchte in der Lage sein zu erkennen, ob der Benutzer beim Besuch meiner Website Adblocking-Software verwendet. Wenn sie es verwenden, möchte ich eine Meldung anzeigen, in der sie aufgefordert werden, es zu deaktivieren, um das Projekt zu unterstützen, wie dies auf dieser Website der Fall ist.
Wenn Sie diese Website aufrufen und in Ihrem Browser eine Art Adblock-Software aktiviert ist, wird auf der Website anstelle der tatsächlichen Anzeigen ein kleines Banner angezeigt, das den Nutzern mitteilt, dass die Werbeeinnahmen für das Hosting des Projekts verwendet werden, und sie sollten in Betracht ziehen, Adblock zu deaktivieren .
Ich möchte das auf meiner Website tun. Ich verwende Adsense-Anzeigen. Wie kann ich das tun?
Antworten:
Meine Lösung ist nicht spezifisch für ein bestimmtes Werbenetzwerk und sehr leicht. Ich habe es für ein paar Jahre in der Produktion betrieben. AdBlock blockiert alle URLs, die das Wort "Anzeigen" enthalten. Das habe ich also getan:
Ich habe meiner Webroot eine kleine JS-Datei mit dem Namen hinzugefügt
ads.js
Dies ist die einzige Codezeile in dieser Datei
Dann irgendwo auf meiner Seite:
Dateien wie ads.js werden von mindestens diesen Adblockern in Chrome blockiert:
Update am 15.02.2019:
Ghostery wurde in der obigen Liste hinzugefügt, da die Erweiterung jetzt auch Anforderungen an ads.js blockiert. Sehr praktisch. Bedeutet dies, dass Ghostery uns Entwicklern tatsächlich hilft, die Blockierung von Anzeigen mit ihrer Erweiterung zu erkennen?
Funktioniert nicht mit:
Datenschutz Dachs
quelle
js/ads.js
bitte den vollständigen Link von geben ? Da ich in Blogger bin, musste ich das.js
irgendwo hochladen (wie: Google Drive) und der Link enthält in diesem Fall nichtads
. Es wäre sehr hilfreich, wenn Sie den Link Ihrer Datei angeben.Keine direkte Antwort, aber ich würde die Nachricht hinter die zu ladende Anzeige stellen ... anstatt zu versuchen, sie zu erkennen, wird sie nur angezeigt, wenn die Anzeige dies nicht tut.
quelle
http://thepcspy.com/read/how_to_block_adblock/
Mit jQuery:
Natürlich benötigen Sie eine Zielseite für AdblockNotice.html, und die .myTestAd-Klasse muss Ihre tatsächlichen Anzeigencontainer widerspiegeln. Das sollte aber funktionieren.
BEARBEITEN
Wie von TD_Nijboer empfohlen, ist es besser, den Selektor
:hidden
(oder:visible
, wie ich unten verwende) zu verwenden, damit auch Folgendesdisplay: none
überprüft wird:Natürlich können beide auf Wunsch zu einem
if
Block kombiniert werden.Beachten Sie, dass dies
visibility: hidden
auch nicht von beiden erfasst wird (wo der Layoutbereich verbleibt, die Anzeige jedoch nicht sichtbar ist). Um dies zu überprüfen, kann ein anderer Filter verwendet werden:Dadurch erhalten Sie eine Reihe von Anzeigenelementen, die "unsichtbar" sind (wobei jedes Element
0
theoretisch größer als ein Problem ist).quelle
Redirecting in this case is a bad idea. If your advertising service goes down, all visitors could be redirected to that page.
Tatsächlich. Ganz zu schweigen davon, dass sie einfach ein einfaches Skript zusammenstellen würden, um die Gegenmaßnahme zu besiegen. Denken Sie außerdem wirklich, dass Nutzer durch ihre aggressive und energische Haltung motiviert werden, ihre Werbeblocker zu deaktivieren? Nein, alles, was es erreichen würde, wäre, sie wütend zu machen und sie gegen Ihre Website zu säuern. Die meisten Websites entscheiden sich dafür, einfach eine Nachricht anzuzeigen, anstatt feindlich zu werden.Keine zusätzlichen Anfragen. Keine externen Bibliotheken. Einfach, einfaches JavaScript:
Dank Christian Heilmanns Beitrag denke ich, dass dies bei weitem die beste Lösung ist, um AdBlock zu erkennen.
quelle
testAd.style.display = 'absolute'
und vom Bildschirm entfernen<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="background-color:red;height:300px;width:300px;position: absolute;left:0;top:0;"> </div>
(Natürlich sollte<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="height:1px;width:1px;position: absolute;left:-999px;top:-999px;"> </div>
absolute
ist einposition
Wert.window.onload
Funktion hinzugefügt habeDie meisten Anzeigen werden dynamisch in Javascript geladen. Ich habe nur das Ereignis onerror verwendet, um festzustellen, ob das Anzeigenskript geladen werden konnte oder nicht. Scheint zu funktionieren.
Beispiel mit GoogleAds:
Dies kann auch für andere Elemente verwendet werden, um festzustellen, ob ein Werbeblocker den Inhalt blockiert. Diese Methode kann zu Fehlalarmen führen, wenn die Remote-Elemente nicht vorhanden oder nicht erreichbar sind.
quelle
offsetHeight
Um festzustellen, ob der Nutzer Anzeigen blockiert, müssen Sie lediglich eine Funktion im Anzeigen-Javascript suchen und versuchen, sie zu testen. Es spielt keine Rolle, mit welcher Methode sie die Anzeige blockieren. So sieht es für Google Adsense-Anzeigen aus:
Diese Methode wird hier beschrieben: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam
quelle
typeof
ist ein Overhead, wenn Sie die Eigenschaft des Objekts überprüfen. Verwenden Sie einfach=== undefined
.Meine einfachste Lösung mit jquery ist:
adsement.js enthält nur nichts. Wenn jemand Adblock verwendet, schlägt dies fehl und die Funktion wird aufgerufen.
quelle
Ich weiß, dass es bereits genügend Antworten gibt, aber da diese Frage bei Google nach "Adblock Adblock" im Thema gesucht wird, wollte ich einen Einblick geben, falls Sie Adsense nicht verwenden .
In diesem Beispiel können Sie insbesondere feststellen, ob die von Firefox Adblock bereitgestellte Standard-Adblock-Liste verwendet wird. Es ist vorteilhaft, dass in dieser Sperrliste ein Element mit der CSS-ID blockiert ist
#bottomAd
. Wenn ich ein solches Element in die Seite einbinde und auf seine Höhe teste, weiß ich, ob Adblocking aktiv ist oder nicht:Der Rest wird über den üblichen jQuery-Verdächtigen erledigt:
Wie zu sehen ist, verwende ich
setTimeout
mit einer Zeitüberschreitung von mindestens 1 ms. Ich habe dies in verschiedenen Browsern getestet und die meiste Zeit direkt nach dem Element gesucht, dasready
immer 0 zurückgegeben hat. egal ob der Adblocker aktiv war oder nicht. Ich hatte zwei Ideen dazu: Entweder war das Rendern noch nicht fertig oder Adblock hat noch nicht angefangen. Ich habe mich nicht weiter darum gekümmert.quelle
.is(":hidden")
hängt die Prüfung davon ab, ob sowohl Höhe als auch Breite Null sind. Wenn Sie nur die Höhe auf 0 setzen, das div aber immer noch eine Breite einnimmt, wird es von jQuery nicht als "versteckt" betrachtet. Ob Sie das sagen können,.is(":hidden")
hängt also davon ab, wie der Adblocker die Größe von Inhalten ändert / ausblendet.Mein Rat ist: Tu es nicht!
Jedes Szenario, in dem Sie Menschen als "Übeltäter" behandeln, führt dazu, dass sie sich wehren.
Hier ist mein Vorschlag.
Fügen Sie oben auf der Seite eine kleine unauffällige Nachricht (unabhängig davon, ob Anzeigen blockiert werden) mit dem Text
I *totally* respect your right to block ads
und einem Link zu einer anderen Seite / einem anderen Popup mit dem Titel einRead more ...
.Stellen Sie auf der anderen Seite klar, dass Sie verstehen, dass es sich um ihren Computer handelt und dass sie die Werbeblockierung verwenden können.
Machen Sie auch auf nicht anklagende Weise klar , dass die Verwendung dieser Blocker es für Sie schwieriger macht, großartige Inhalte zu liefern (und erklären Sie im Detail, warum dies so ist). Es ist total ihre Entscheidung. Konzentrieren Sie sich auf die positiven Aspekte des Ausschaltens der Blockierung.
Diejenigen, die vehement gegen Anzeigen sind, werden dies ignorieren, aber Sie hatten sowieso nie die Chance, sie zu überzeugen. Diejenigen, die gleichgültig sind, werden möglicherweise von Ihrer Berufung beeinflusst, da Sie nicht die ganze Sache "Lass mich meinen Weg gehen oder ich nehme meinen Ball und gehe nach Hause" tun, die ehrlich gesagt die ausschließliche Domäne von fünfjährigen Kindern sein sollte.
Denken Sie daran, niemand hielt eine Waffe an Ihren Kopf und zwang Sie, Ihre Sachen ins Netz zu stellen. Behandeln Sie Ihre Leserschaft / Benutzer mit Respekt und Sie werden wahrscheinlich feststellen, dass sich eine gute Anzahl von ihnen revanchiert.
quelle
Sie nutzen die Tatsache, dass der Anzeigencode von Google einen Iframe mit der ID "Iframe" erstellt. Solange Sie noch nichts mit dieser ID auf Ihrer Seite haben, funktioniert dies auch für Sie.
quelle
Fügen Sie einfach ein kleines Skript auf Ihrer Website hinzu:
Mit dem Namen adsbygoogle.js
Dann gehen Sie wie folgt vor:
Diese Lösung haben Sie hier gefunden
quelle
Ich habe festgestellt, dass in früheren Kommentaren Google Adsense als Testobjekt verwendet wurde. Einige Seiten verwenden kein Adsense, und die Verwendung des Adsense-Blocks als Test ist keine gute Idee. Weil Adsense Block Ihre SEO schädigen kann. Hier ist ein Beispiel, wie ich durch Adblocker eine einfache blockierte Klasse erkenne:
Html:
Jquery:
"ablockercheck" ist eine ID, die der Adblocker blockiert. Wenn Sie also überprüfen, ob es sichtbar ist, können Sie feststellen, ob der Adblocker aktiviert ist.
quelle
AdBlock scheint das Laden von AdSense (usw.) JavaScript-Dateien zu blockieren. Wenn Sie also eine asynchrone Version von AdSense-Anzeigen verwenden, können Sie überprüfen, ob dies
adsbygoogle
eine istArray
. Dies muss nach einigen Sekunden überprüft werden, da das asynchrone Skript ... asynchron ist. Hier ist eine grobe Übersicht :Im Folgenden finden Sie ein Beispiel dafür, wie der asynchrone Anzeigencode von AdSense aussieht:
Beachten Sie, dass dies
adsbygoogle
als Array initialisiert wird. Dieadsbygoogle.js
Bibliothek ändert dieses ArrayObject {push: ...}
bei der Ausführung in. Wenn Sie den Variablentyp nach einer bestimmten Zeit überprüfen, können Sie feststellen, ob das Skript geladen wurde.quelle
Diesen Ansatz verwende ich auf meiner Website. Vielleicht finden Sie ihn hilfreich. Meiner Meinung nach ist es die einfachste Lösung.
AdBlocker blockiert bestimmte Klassen und HTML-Elemente. Wenn Sie diese Selektoren auf blockierte Anzeigen in der Entwicklerkonsole überprüfen (alle sind aufgelistet), können Sie feststellen, welche Elemente immer blockiert werden.
Überprüfen Sie beispielsweise einfach diese Fragenseite auf stackoverflow und Sie werden eine Reihe blockierter Anzeigen sehen.
Beispielsweise wird jedes Element mit
bottom-ad
Klasse automatisch blockiert.bottom-ad
Klasse erstellt:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
$('.bottom-ad').css('display') == "none"
oder noch besser mit$('.bottom-ad').is(':visible')
Wenn der Wert "ist"
true
, ist AdBlocker aktiv.quelle
Sie benötigen keine zusätzliche HTTP-Anforderung. Sie können einfach die Höhe eines gefälschten Adds berechnen.
Übrigens finden Sie hier eine vollständige Liste mit den Elementen, die Adblocker nicht rendern.
quelle
Der sichere Weg ist, Ihre Anzeigen darin zu verpacken
<div>
und die Höhe zu überprüfenEs funktioniert mit Adblock Plus und Bluehell Firewall.
quelle
Eine effiziente Methode, um zu überprüfen, ob ein Adblock vorhanden ist: Überprüfen Sie einfach, ob ein Adblock aktiviert ist, indem Sie versuchen, die URL von Google-Anzeigen auszulösen. Wenn ja, führen Sie den callback_has_adblock aus. Wenn nicht, führen Sie den callback_no_adblock aus. Diese Lösung kostet eine Anfrage mehr, funktioniert aber zumindest:
Diese Lösung funktioniert für alle Arten von Anzeigen, nicht nur für Google AdSense.
quelle
Trotz des Alters dieser Frage fand ich sie kürzlich sehr nützlich und kann daher nur davon ausgehen, dass andere sie noch sehen. Nachdem ich hier und anderswo nachgesehen hatte, vermutete ich, dass die drei wichtigsten clientseitigen Überprüfungen zur indirekten Erkennung eines Werbeblockers auf blockiert
div
/img
blockiert wareniframe
s und blockierten Ressourcen (Javascript-Dateien) zu .Vielleicht ist es übertrieben oder paranoid, aber es deckt Anzeigenblockierungssysteme ab, die nur ein oder zwei aus der Auswahl blockieren und daher möglicherweise nicht abgedeckt wurden, wenn Sie nur die eine Prüfung durchgeführt haben.
Auf der Seite, auf der Sie die Prüfungen ausführen, fügen Sie Folgendes hinzu: (Ich verwende jQuery)
und fügen Sie an einer anderen Stelle auf der Seite Folgendes hinzu:
Ich habe ein Div mit einem Ködernamen sowie ein extern gehostetes Bild mit dem Text "Advert" und in den von AdSense verwendeten Dimensionen verwendet (dank placehold.it!).
In
advertisement.js
sollten Sie etwas an das Dokument anhängen, das wir später überprüfen können. Obwohl es so aussieht, als würden Sie das Gleiche tun wie zuvor, prüfen Sie tatsächlich, ob die Datei (advertisement.js
) selbst geladen wird, nicht die Ausgabe.Und dann das Werbeblocker-Erkennungsskript, das alles kombiniert
Wenn das Dokument fertig ist , dh das Markup geladen ist, fügen wir dem Dokument auch den Iframe hinzu. Wenn dann das Fenster geladen wird , dh der Inhalt inkl. Bilder etc. geladen werden, prüfen wir:
advertimsent.js
wurde nicht gesperrt.Und die Stile:
Hoffe das hilft
quelle
Wenn Sie den neuen AdSense-Code verwenden, können Sie eine einfache Überprüfung durchführen, ohne auf Inhalts- oder CSS-Überprüfungen zurückgreifen zu müssen.
Platzieren Sie Ihre Anzeigen wie gewohnt in Ihrem Markup:
Dann rufen Sie den Adsense-Code am Ende Ihrer Seite auf (beachten Sie, dass Sie
"async"
beim Aufrufen desadsbygoogle.js
Skripts nicht das Flag verwenden ):Fügen Sie dann diesen kleinen Codeausschnitt darunter hinzu:
AdSense erstellt / setzt das Flag immer
adsbygoogle.loaded
auf,true
wenn die Anzeigen geladen werden. Sie können die Prüfung in eine setTimeout-Funktion einfügen, um die Prüfung um einige Sekunden zu verzögern.quelle
Die meisten Adblocker brechen die HTTP-Anforderung an das Element ab
ads.js
und machen es0px
für das Element, aber manchmal entfernte der Adblocker das DOM , und einige der obigen Antworten schlagen fehl, weil die Existenz des Elements nicht überprüft wird.Verwenden von
setTimeout()
ist eine gute Praxis, da ohne sie das Skript mit Adblocker rast.Das folgende Skript prüft, ob dom vorhanden / entfernt ist, und prüft
offsetHeight
, ob ein Element vorhanden ist.quelle
Alle oben genannten Antworten sind gültig, die meisten funktionieren jedoch nicht für die Blockierung von Anzeigen auf DNS-Ebene.
Werbeblocker auf DNS-Ebene (wie Pi-Hole ) geben grundsätzlich NXDOMAIN (Domain existiert nicht) für eine Liste von Werbeblocker-Domains zurück (z. B. wird telemetry.microsoft.com "nicht existieren", wenn dies der Fall ist).
Es gibt einige Möglichkeiten, dies zu umgehen:
Methode A : Anforderung von Anzeigen nach IP-Adresse, nicht nach Domain.
Diese Methode ist etwas ärgerlich, da Sie die IP-Adressen im Auge behalten müssten. Dies ist problematisch, wenn Ihr Code nicht regelmäßig gepflegt oder aktualisiert wird.
Methode B : Blockieren Sie alle fehlgeschlagenen Anforderungen, auch wenn der Client NXDOMAIN meldet.
Dies ist für Benutzer sehr ärgerlich, wenn es sich um eine "legitime" NXDOMAIN handelt.
quelle
und in der Datei getbanner.cfm:
Ich denke, es ist der einfachste Weg, Adblock zu erkennen.
quelle
true
immer zu seinDas hat bei mir funktioniert:
quelle
Ich weiß, dass dies bereits beantwortet wurde, aber ich habe mir die vorgeschlagene Beispielseite angesehen und sehe, dass sie es so machen:
quelle
Keine Zeitüberschreitungen und DOM-Schnüffeln erforderlich. Versuchen Sie einfach, ein Skript aus gängigen Werbenetzwerken zu laden, und prüfen Sie, ob der Werbeblocker die HTTP-Anforderung abgefangen hat.
quelle
Ich habe gerade mein eigenes "Plugin" erstellt, um dieses Problem zu lösen, und es funktioniert wirklich gut:
adBuddy + jsBuddy:
ADBuddy JSBuddy GitHub
Ich habe unter anderem die Kompatibilität mit Mobilgeräten und die Erkennung von jsBlocking hinzugefügt ... (Wie ein Overlay, das den Benutzern angezeigt wird, die sie auffordern, die Software adBlocking / jsBlocking zu deaktivieren ); Auch machte es reaktionsschnell freundlich.
Es wird unter der Coffeeware-Lizenz eröffnet .
quelle
Ich verstehe Ihre Spannung und Sie können überprüfen, ob ein Element per Skript erstellt wurde oder ob das Element ausgeblendet ist. Und wenn wir über das Blockieren von Werbung sprechen, können Sie nur auf die Sichtbarkeit der Elemente zählen, nicht auf die Präsenz der Elemente.
Elemente, die mit Skripten von Drittanbietern erstellt wurden, sind niemals vorhanden. Wenn das Skript derzeit nicht erreichbar ist (DNS-Fehler, Remote-Webserver-Fehler, Offline-Vorladen von Webseiten usw.), werden Sie immer falsch positiv.
Alle anderen Antworten mit Überprüfungen sind korrekt, aber denken Sie daran.
quelle
timing's
Die Antwort ist gut durchdacht, funktioniert aber nicht mehr. Deshalb habe ich den Namen der js-Datei von "ads" auf "adsense" aktualisiert und sie funktioniert wie ein Zauber!Hier ist der Code, vielleicht hilft das jemandem:
Geben Sie in die Js-Datei genau diese Zeile ein:
var adblockDetecter = true;
quelle
Jetzt gibt es eine bessere Möglichkeit, dies mit einem einfachen JS-Skript namens AdBlock Detector zu tun.
So verwenden Sie es:
Fügen Sie dies Ihrem
<head>
Abschnitt hinzu:Jetzt können Sie die
ab-message
ID überall dort verwenden, wo Sie AdBlock-Nutzern eine Nachricht anzeigen möchten:Beachten Sie den Inline-Stil, der hinzugefügt wurde, um ihn ursprünglich auszublenden (Sie können dies natürlich auch aus Ihrer eigenen CSS-Datei heraus tun).
Beachten Sie auch, dass es 500 ms dauert, weil es warten muss, bis der Adblocker seine Sache erledigt, sonst funktioniert es nicht.
Eine kleine Erklärung, wie dieses Skript funktioniert
Zunächst wird ein Iframe mit einer Quelle eines zufällig generierten Links angehängt. (Es wird zufällig generiert, da einige Adblocks intelligent sind und irgendwann erkennen, dass ein Link gefälscht ist.)
Anschließend werden mehrere Überprüfungen dieses Iframes ausgeführt (wenn er erfolgreich geladen wurde oder wenn sein Stil geändert wurde). Wenn einer dieser Tests wahr ist, wird das
ab-message
Element angezeigt , um Benutzer zu blockieren.Dieses Skript funktioniert für die meisten (wenn nicht alle) Werbeblocker.
EXTRA
Eigentlich hätte kein Punkt nur einen Kern erstellen können, aber stattdessen habe ich ein Github-Projekt erstellt, aber probieren Sie es trotzdem aus und markieren Sie es, wenn es Ihnen geholfen hat.
abDetector: Einfacher Vanilla JavaScript AdBlock Detector.
Genießen.
quelle
Sie können dies überprüfen, es könnte helfen , Adblocker zu erkennen
Es ist eine Implementierung der Timing-Antwort
Fügen Sie dies vor jedem Skript im Head-Tag hinzu:
Dann später benutzen:
quelle
window.adblocker
in Ihrer Browserkonsole, wenn er zurückgegeben wird.true
Dann wird der Adblocker aktiviert. Andernfalls wird der Wert zurückgegeben.false
Sie können die vollständige Dokumentation von