Frage

Ich möchte erkennen können, ob der Benutzer bei meiner Website AdBlocking -Software verwendet. Wenn sie es verwenden, möchte ich eine Nachricht anzeigen, in der sie aufgefordert werden, sie auszuschalten, um das Projekt zu unterstützen, wie Diese Internetseite tut.

Wenn Sie diese Website eingeben und Ihr Browser eine Adblock -Software aktiviert, zeigt die Website anstatt die tatsächlichen Anzeigen anzuzeigen .

Ich möchte das auf meiner Website tun, ich verwende Adsense -Anzeigen dafür. Wie kann ich das tun?

War es hilfreich?

Lösung

Meine Lösung ist nicht spezifisch für ein bestimmtes Anzeigennetzwerk und sehr leicht. Ich habe es seit ein paar Jahren in Produktion betrieben. Adblock blockiert alle URLs, die das Wort "Anzeigen" enthalten. Das habe ich also getan:

Ich habe meinem Webroot eine kleine JS -Datei mit dem Namen hinzugefügt ads.js

Dies ist die einzige Codezeile in dieser Datei

var canRunAds = true;

Dann irgendwo in meiner Seite:

<html>
  <head>
    <script src="/js/ads.js"></script>
  </head>
  <body>
    <script>
      if( window.canRunAds === undefined ){
        // adblocker detected, show fallback
        showFallbackImage();
      }
    </script>
  </body>
</html>

Dateien wie ads.js werden von zumindest diese Adblocker auf Chrome blockiert:

  • Adblock
  • Adblock Plus
  • Adblock Pro
  • Ghostery

Update am 2019-02-15:

In der obigen Liste wurde Ghostery hinzugefügt, da die Erweiterung jetzt auch Anfragen an ads.js. Sehr praktisch. Bedeutet dies, dass Ghostery uns tatsächlich den Entwicklern hilft, die Blockierung von Anzeigen mit ihrer Erweiterung zu erkennen?

Funktioniert nicht mit:

Privatsphäre Dachs

Andere Tipps

Keine direkte Antwort, aber ich würde die Nachricht hinter die Anzeige setzen, um geladen zu werden ... eher, dass es nur angezeigt wird, wenn die Anzeige es nicht tut.

http://thepcspy.com/read/how_to_block_adblock/

Mit JQuery:

function blockAdblockUser() {
    if ($('.myTestAd').height() == 0) {
        window.location = 'http://example.com/AdblockNotice.html';
    }
}

$(document).ready(function(){
    blockAdblockUser();
});

Natürlich müssten Sie eine Zielseite für adblocknotice.html haben, und die .MyTestad -Klasse muss Ihre tatsächlichen Anzeigencontainer widerspiegeln. Aber das sollte funktionieren.

BEARBEITEN

Wie TD_NIJBOER empfiehlt, ist ein besserer Weg, die zu verwenden :hidden (oder :visible, wie ich unten benutze) Selector so, dass display: none wird auch überprüft:

function blockAdblockUser() {
    if ($('.myTestAd').filter(':visible').length == 0) {
        // All are hidden, or "not visible", so:
        // Redirect, show dialog, do something...
    } else if ($('.myTestAd').filter(':hidden').length > 0) {
        // Maybe a different error if only some are hidden?
        // Redirect, show dialog, do something...
    }
}

Natürlich könnten beide zu einem kombiniert werden if Blockieren Sie bei Wunsch.

Beachten Sie, dass visibility: hidden wird auch nicht von auch von dem Layoutraum erfasst, aber die Anzeige ist nicht sichtbar). Um dies zu überprüfen, kann ein weiterer Filter verwendet werden:

$('.myTestAd').filter(function fi(){
    return $(this).css('visibility') == 'hidden';
})

Das gibt Ihnen eine Reihe von Anzeigenelementen, die "unsichtbar" sind (wobei jeder größer ist als 0 theoretisch ein Problem sein).

Keine zusätzlichen Anfragen. Keine externen Bibliotheken. Einfach einfach, einfaches JavaScript:

var adBlockEnabled = false;
var testAd = document.createElement('div');
testAd.innerHTML = '&nbsp;';
testAd.className = 'adsbox';
document.body.appendChild(testAd);
window.setTimeout(function() {
  if (testAd.offsetHeight === 0) {
    adBlockEnabled = true;
  }
  testAd.remove();
  console.log('AdBlock Enabled? ', adBlockEnabled)
}, 100);

  • Sie erstellen ein Element mit der Klassen -ADSBox (wie ein abnehmbares Element in der Definitionsdatei von Adblock Plus definiert)
  • Sie fügen es dem Dokument hinzu und nach kurz
  • Wenn Adblock installiert ist, hat das Element keine Höhe.

Gutschrift an Christian Heilmanns Post, Ich denke, es ist bei weitem die beste Lösung, um Adblock zu erkennen.

Die meisten Anzeigen werden in JavaScript dynamisch geladen. Ich habe gerade das OnError -Ereignis verwendet, um festzustellen, ob das Anzeigenskript geladen werden könnte oder nicht. Scheint zu funktionieren.

Beispiel mit Googleads:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>

Dies kann auch für andere Elemente verwendet werden, um festzustellen, ob ein Anzeigenblocker den Inhalt blockiert. Diese Methode kann falsch positive Ergebnisse erzielen, wenn die Remote -Elemente nicht vorhanden sind oder nicht erreicht werden können.

Um festzustellen, ob der Benutzer Anzeigen blockiert, müssen Sie lediglich eine Funktion im AD -JavaScript finden und versuchen, dies zu testen. Es spielt keine Rolle, mit welcher Methode sie die Anzeige blockieren. So sieht es für Google Adsense -Anzeigen aus:

if(!window.hasOwnProperty('google_render_ad') || window.google_render_ad === undefined) { 
    //They're blocking ads, display your banner
}

Diese Methode wird hier beschrieben: http://www.metamorphosit.com/detect-web-popup-blocker-software-adblock-spam

Meine einfachste Lösung mit JQuery ist:

$.ajax({
    url: "/scripts/advertisement.js", // this is just an empty js file
    dataType: "script"
}).fail(function () {
    // redirect or display message here
});

Werbung.js enthält nur nichts. Wenn jemand Adblock verwendet, schlägt es fehl und die Funktion wird aufgerufen.

Ich wissen Adsense nicht verwenden.

Insbesondere können Sie mit diesem Beispiel feststellen, ob die Standard-Adblock-Liste von Firefox Adblock verwendet wird. In dieser Blockliste wird ein Element mit der CSS -ID blockiert #bottomAd. Wenn ich ein solches Element in die Seite und den Test für seine Höhe einbeziehe, weiß ich, ob AdBlocking aktiv ist oder nicht:

<!-- some code before -->
<div id="bottomAd" style="font-size: 2px;">&nbsp;</div>
<!-- some code after -->

Der Rest erfolgt über den üblichen jQuery -Verdächtigen:

$(document).ready( function() {
  window.setTimeout( function() {
    var bottomad = $('#bottomAd');
    if (bottomad.length == 1) {
      if (bottomad.height() == 0) {
        // adblocker active
      } else {
        // no adblocker
      }
    }      
  }, 1);
}

Wie zu sehen ist, benutze ich setTimeout mit mindestens einer Auszeit von 1 ms. Ich habe dies an verschiedenen Browsern und meistens getestet und überprüft direkt nach dem Element in ready immer zurückgegeben 0; Egal ob der Adblocker aktiv war oder nicht. Ich hatte zwei Ideen dazu: Entweder wurde noch nicht fertiggestellt oder Adblock war noch nicht eingeschaltet. Ich habe mich nicht die Mühe gemacht, weiter zu untersuchen.

Mein Rat ist: Tu es nicht!

Jedes Szenario, in dem Sie Menschen als "Fehlmacher" behandeln, wird dazu führen, dass sie sich wehren.

Hier ist mein Vorschlag.

Stellen Sie mit dem Text eine kleine unauffällige Nachricht oben auf der Seite (unabhängig davon, ob Anzeigen blockiert werden) I *totally* respect your right to block ads und ein Link zu einer anderen Seite/Pop-up-Berechtigung mit dem Titel " Read more ....

Machen Sie auf der anderen Seite klar, dass Sie verstehen, dass es sich um ihren Computer handelt und dass sie frei sind, Werbesperrungen zu verwenden.

Mach auch klar auf nicht akribierende Weise Dass die Verwendung dieser Blocker es für Sie schwieriger macht, großartige Inhalte zu liefern (um zu erklären, warum im Detail), und dass Sie, obwohl Sie es vorziehen, dass die Anzeigenblockierung nicht auf Ihrer Website stattfinden, dies jedoch völlig ihre Entscheidung ist. Konzentrieren Sie sich auf die positiven Auswirkungen des Blockierens.

Diejenigen, die vehement gegen Anzeigen sind, werden dies ignorieren, aber Sie haben nie die Chance, sie zu überzeugen. Diejenigen, die gleichgültig sind, sind möglicherweise von Ihrer Anziehungskraft beeinflusst, da Sie nicht das ganze "Lassen Sie mich meinen Ball machen oder meinen Ball nehmen und nach Hause gehen", was ehrlich gesagt die exklusive Domäne von fünfjährigen Kindern sein sollte.

Denken Sie daran, niemand hat eine Waffe am Kopf gehalten und Sie gezwungen, Ihre Sachen ins Netz zu legen. Behandeln Sie Ihre Leserschaft/Benutzer mit Respekt und Sie werden wahrscheinlich eine gute Anzahl von ihnen erweitern.

Sie verwenden die Tatsache, dass der Anzeigencode von Google einen IFRame mit der ID "Iframe" erstellt. Solange Sie mit dieser ID noch nicht etwas auf Ihrer Seite haben, würde dies auch für Sie funktionieren.

<p id="ads">
<script type="text/javascript"><!--
google_ad_client = "their-ad-code-here";
/* 160x600, droite */
google_ad_slot = "their-ad-code-here";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

</p>

<script type="text/javascript"><!--
if(document.getElementsByTagName("iframe").item(0) == null)
{
    document.write("<div style='width:160px; height:600px; padding-top: 280px; margin-left:5px;border:1px solid #000000; text-align:center; font-family:century gothic, arial, helvetica, sans serif;padding-left:5px;padding-right:5px;'>Advertising seems to be blocked by your browser.<br /><br /><span style='font-size:10px'>Please notice that advertising helps us to host the project.<br /><br />If you find these ads intrusive or inappropriate, please contact me.</span><img src='http://www.playonlinux.com/images/abp.jpg' alt='Adblock Plus' /></div>");
}
--></script>

Ich habe bemerkt, dass frühere Kommentare Google Adsense als Objekt verwendet haben, um zu testen. Auf einigen Seiten wird Adsense nicht verwendet, und die Verwendung von AdSense -Block als Test ist nicht wirklich eine gute Idee. Denn Adsense Block kann Ihrem SEO schaden. Hier ist Beispiel, wie ich von Adblocker Simple Blocked Class erkenne:

HTML:

<div class="ad-placement" id="ablockercheck"></div>
<div id="ablockermsg" style="display: none"></div>

JQuery:

$(document).ready(function()
{
   if(!$("#ablockercheck").is(":visible"))
   {
     $("#ablockermsg").text("Please disable adblocker.").show();
   }
});

"aBlockercheck" ist eine ID, die Adblocker blockiert. Überprüfen Sie es also, wenn es sichtbar ist, dass Sie feststellen können, ob Adblocker eingeschaltet ist.

Fügen Sie einfach ein kleines Skript auf Ihrer Website hinzu:

var isAdsDisplayed = true;

Mit Namen adsbygoogle.js

Dann folgen:

<script src="/js/adsbygoogle.js"></script>
<script>
if(window.isAdsDisplayed === undefined ) {
  // AdBlock is enabled. Show message or track custom data here
}
</script>

Fand diese Lösung hier

Adblock scheint das Laden von Adsense (etc) JavaScript -Dateien zu blockieren. Wenn Sie also eine asynchrone Version von AdSense -Anzeigen verwenden, können Sie überprüfen, ob adsbygoogle ist ein Array. Dies muss nach wenigen Sekunden überprüft werden, da das asynchrone Skript ... asynchron ist. Hier ist ein grobe Übersicht:

window.setTimeout(function(){
    if(adsbygoogle instanceof Array) {
        // adsbygoogle.js did not execute; probably blocked by an ad blocker
    } else {
        // adsbygoogle.js executed
    }
}, 2000);

Um zu verdeutlichen, finden Sie hier ein Beispiel dafür, wie der asynchrone Adsse -Ads -Code aussieht:

<!-- this can go anywhere -->
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<!-- this is where the ads display -->
<ins class="adsbygoogle" ...></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

Beachte das adsbygoogle wird als Array initialisiert. Das adsbygoogle.js Bibliothek ändert dieses Array in Object {push: ...} Wenn es ausgeführt wird. Wenn Sie die Art der Variablen nach einer bestimmten Zeit überprüfen, können Sie feststellen, ob das Skript geladen wurde.

Dieser Ansatz, den ich auf meiner Website verwende, werden Sie ihn vielleicht hilfreich finden. Meiner Meinung nach ist es das Einfachste Lösung.

Adblocker blockiert bestimmte Klassen und HTML -Elemente, indem Sie diese Selektoren von blockierten Anzeigen in der Entwicklerkonsole inspizieren (sie sind alle aufgelistet), können Sie sehen, welche Elemente immer blockiert werden.

Inspizieren Sie diese Frageseite einfach auf Stackoverflow und Sie werden eine Reihe blockierter Anzeigen sehen.

Zum Beispiel jedes Element mit bottom-ad Die Klasse wird automatisch blockiert.

  1. Ich habe ein nicht leeres Div-Element mit erstellt bottom-ad Klasse:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
  2. Überprüfen Sie nach dem Laden von Seite einfach, ob dieses Element versteckt ist. Ich habe JQuery verwendet, aber ich kann JavaScript verwenden:$('.bottom-ad').css('display') == "none" oder sogar noch besser durch Verwendung $('.bottom-ad').is(':visible')

Wenn Wert ist true, Dann ist Adblocker aktiv.

Sie benötigen keine zusätzliche HTTP -Anfrage. Sie können einfach die Höhe eines gefälschten Hinzufügens berechnen.

Übrigens ist hier ein volle Liste Übereinstimmung mit den Elementen, die Adblocker vermeiden, vermeiden sie.

window.adBlockRunning = function() {
    return (getComputedStyle(document.getElementById("detect"))["display"] == "none") ? true : false;
  }()

console.log(window.adBlockRunning);
#detect {
  height: 1px;
  width: 1px;
  position: absolute;
  left: -999em;
  top: -999em
}
<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads"></div>

Der sichere Weg besteht darin, Ihre Anzeigen hineinzuwickeln <div> und überprüfen Sie die Höhe

<div id="check-ab">
/* your ads code */
</div>

setTimeout(function(){
  if(document.getElementById("check-ab").offsetHeight === 0){
    console.log("ads blocked");
  }
  else{
    console.log("ads running");
  }
}, 100);

Es funktioniert mit Adblock Plus und Bluehell Firewall.

Eine effiziente Möglichkeit zu überprüfen, ob ein Adblock vorhanden ist: Überprüfen Sie einfach, ob Adblock aktiviert ist, indem Sie versuchen, die URL von Google -Anzeigen auszulösen. Wenn ja, führen Sie den Callback_Has_Adblock aus, falls nicht die callback_no_adblock ausführen. Diese Lösung kostet eine Anfrage mehr, aber zumindest funktioniert sie:

var hasAdBlock = function (callback_has_adblock, callback_no_adblock) {

    $.getScript( "http://pagead2.googlesyndication.com/pagead/show_ads.js" )
        .done(function( script, textStatus ) {
            callback_no_adblock();
        })
        .fail(function( jqxhr, settings, exception ) {
            callback_has_adblock();
    });
};

Diese Lösung funktioniert für alle Arten von Anzeigen, nicht nur Google Adsense.

Wenn Sie den neuen AdSense -Code verwenden, können Sie eine einfache Überprüfung durchführen, ohne auf Inhalte oder CSS -Überprüfungen zurückzuführen.

Platzieren Sie Ihre Anzeigen wie gewohnt in Ihrem Markup:

<ins class="adsbygoogle" style="display: block;"
   data-ad-client="ca-pub-######"
   data-ad-slot="#######"
   data-ad-format="auto"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

Dann nennen Sie den Adsense -Code unter dem Unterseite Ihrer Seite (Notiz unterlassen Sie Verwenden Sie das "async" Fahnen Sie beim Anruf die adsbygoogle.js Skript):

<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

Fügen Sie dann diesen kleinen Code -Snippit unten hinzu:

<script>
if (!adsbygoogle.loaded) {
   // do something to alert the user
}
</script>

AdSense erstellt/setzt immer die Flagge adsbygoogle.loaded zu true Wenn die Anzeigen geladen sind, können Sie die Überprüfung einer SetTimeout -Funktion einlegen, um die Überprüfung um einige Sekunden zu verzögern.

Trotz des Alters dieser Frage fand ich es kürzlich sehr nützlich und kann daher nur davon ausgehen, dass andere es immer noch sehen. Nachdem ich hier und anderswo gesucht hatte, vermutete ich, dass die drei Hauptkunden -Seitenprüfungen zur indirekten Erkennung eines Anzeigenblockers nach blockiertem Blockier suchen sollten div/img, verstopft iframes und blockierte Ressourcen (JavaScript -Dateien).

Vielleicht ist es übertrieben oder paranoid, deckt aber für Anzeigenblockierungssysteme ab, die nur ein oder zwei aus der Auswahl blockieren und daher möglicherweise nicht abgedeckt worden sein, wenn Sie nur den einen Scheck durchgeführt hätten.

Auf der Seite, auf der Sie die Schecks ausführen, fügen Sie hinzu: (Ich benutze jQuery)

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="advertisement.js"></script>
<script type="text/javascript" src="abds.js"></script>

und fügen Sie Folgendes an irgendwo anders auf der Seite hinzu:

<div id="myTestAd"><img src="http://placehold.it/300x250/000000/ffffff.png&text=Advert" /></div>

Ich habe einen Div mit einem Ködernamen sowie ein extern gehostetes Bild mit der Text "Anzeige" und in Dimensionen von AdSense (dank Placehold.it!) Verwendet.

Im advertisement.js Sie sollten etwas an das Dokument anhängen, auf das wir später überprüfen können. Obwohl es so aussieht, als ob Sie das Gleiche wie zuvor tun, überprüfen Sie tatsächlich nach der Datei (advertisement.js) selbst geladen wird, nicht der Ausgang.

$(document).ready(
{

    $("body").append("<div id=\"myTestAd2\">check</div>");

});

Und dann das Skript zum Erkennung von Anzeigenblocker, das alles kombiniert

$(document).ready(function()
{
    var ifr = '<iframe id="adServer" src="http://ads.google.com/adserver/adlogger_tracker.php" width="300" height="300"></iframe>';
    $("body").append(ifr);
});

$(window).on("load",function()
{

    var atb = $("#myTestAd");
    var atb2= $("#myTestAd2");
    var ifr = $("#adServer");

    setTimeout(function()
    {

        if( (atb.height()==0) ||
            (atb.filter(":visible").length==0) ||
            (atb.filter(":hidden").length>0) ||
            (atb.is("hidden")) ||
            (atb.css("visibility")=="hidden") ||
            (atb.css("display")=="none") ||
            (atb2.html()!="check") ||
            (ifr.height()!=300) ||
            (ifr.width()!=300) )
        {
            alert("You're using ad blocker you normal person, you!");
        }

    },500);

});

Wenn das Dokument ist bereit, dh das markup ist geladen, wir fügen das iframe auch zum dokument hinzu. Dann, wenn das Fenster ist geladen, dh der Inhalt inkl. Bilder usw. sind geladen, wir überprüfen:

  • Die Abmessungen und Sichtbarkeit des ersten Testdiv.
  • Dass der Inhalt des zweiten Testdivs "Check" ist, wie es gewesen wäre, wenn der advertimsent.js war nicht verstopft.
  • Die Dimensionen (und ich denke, die Sichtbarkeit als verstecktes Objekt hat keine Höhe oder Breite des Iframe

Und die Stile:

div#myTestAd, iframe#adServer
{
    display: block;
    position: absolute;
    left: -9999px;
    top: -9999px;
}

div#myTestAd2
{
    display: none;
}

Hoffe das hilft

Die meisten Adblocker stornieren die HTTP -Anfrage an ads.js und mache 0px für das Element, aber irgendwann Adblocker DOM entfernt, und eine Antwort oben wird fehlschlagen, weil das Bestehen des Elements nicht überprüft wird.

Verwendung setTimeout() ist eine gute Praxis, denn ohne sie wird das Drehbuch mit Adblocker Rennen rennen.

Das folgende Skript wird prüft, ob DOM existiert/entfernt und überprüft wird offsetHeight eines Elements, wenn es existiert.

setTimeout(function() {
  var a = document.querySelector('.showads'),
    b = a ? (a.offsetHeight ? false : true) : true;
  console.log('ads blocked?', b)
}, 200); // don't too fast or will make the result wrong.
<div class="ads showads">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>

Ich weiß, dass dies bereits beantwortet wird, aber ich habe mir die vorgeschlagene Beispielstelle angesehen, und ich sehe, dass sie es so machen:

<script type="text/javascript">
if(document.getElementsByTagName("iframe").item(0) == null) {
    document.write("<div style="width: 160px; height: 600px; padding-top: 280px; margin-left: 5px; border: 1px solid #666666; color: #FFF; background-color: #666; text-align:center; font-family: Maven Pro, century gothic, arial, helvetica, sans-serif; padding-left: 5px; padding-right: 5px; border-radius: 7px; font-size: 18px;">Advertising seems to be blocked by your browser.<br><br><span style="font-size: 12px;">Please notice that advertising helps us to host the project.<br><br>If you find these ads intrusive or inappropriate, please contact me.</span><br><img src="http://www.playonlinux.com/images/abp.png" alt="Adblock Plus"></div>");
};
</script>

Keine Notwendigkeit für Zeitüberschreitungen und Dom -Schnüffeln. Versuchen Sie einfach, ein Skript aus beliebten Anzeigennetzwerken zu laden, und prüfen Sie, ob der AD -Blocker die HTTP -Anforderung abgefangen hat.

/**
 * Attempt to load a script from a popular ad network. Ad blockers will intercept the HTTP request.
 *
 * @param {string} url
 * @param {Function} cb
 */
function detectAdBlockerAsync(url, cb){
    var script = document.createElement('script');

    script.onerror = function(){
        script.onerror = null;
        document.body.removeChild(script);
        cb();
    }

    script.src = url;
    document.body.appendChild(script);
}

detectAdBlockerAsync('http://ads.pubmatic.com/AdServer/js/gshowad.js', function(){
    document.body.style.background = '#c00';
});

Ich habe gerade mein eigenes "Plugin" erstellt, um dies zu lösen, und es funktioniert wirklich gut:

adbuddy + jsbuddy:

Adbuddy Jsbuddy Github

Ich habe unter anderem die mobile Kompatibilität und die jsblockierende Erkennung hinzugefügt ... (wie ein Overlay, das den Benutzern dargestellt wird, die sie bitten, die zu deaktivieren Adblocking/JSBlocking Software); Auch machte es reaktionsschnell freundlich.

Es ist openSourced unter dem Kaffee -Lizenz.

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>var adb=true;</script>
<script src="./getbanner.cfm?"></script>
<script>
$(document).ready(function(){if(adb)alert('AdBlock!');});
</script>

und in GetBanner.cfm -Datei:

adb = false;

Ich denke, es ist der einfachste Weg, Adblock zu erkennen.

Das hat für mich funktioniert:

function isAdBlocked() {
     return (typeof(window.google_jobrunner) === "undefined") ? true : false;
}

$(document).ready(function(){
    if(isAdBlocked()) {
       alert('Y U NO LIKE ADS?');
    }
});

timing's Antwort ist schön, denkt aber nicht mehr zu arbeiten, daher habe ich den Namen der JS -Datei auf "Adsense" von "Anzeigen" aktualisiert und es arbeitet wie ein Zauber zurück!

Hier ist der Code, vielleicht hilft dieser Wil jemandem:

<html>
      <head>
            <script src="/adsense.js"></script>
      </head>
             <body>
                   <script>
                           if( window.adblockDetecter === undefined ){
                           // Do anithing, adblocker detected!
                           alert('Adblocker Detected!');}
                   </script>
            </body>
</html>

Geben Sie in der JS -Datei nur diese Zeile ein: var adblockDetecter = true;

Jetzt gibt es eine bessere Möglichkeit, es mit einem einfachen JS -Skript namens zu tun Adblock -Detektor
Hier erfahren Sie, wie man es benutzt:
Fügen Sie dies Ihrem hinzu <head> Sektion:

<script type="text/javascript">
window.onload = function() {
var iframe = document.createElement('iframe'),
    randomDomain = Math.floor(Math.random() * (10000 - 100 + 1)) + 100,
    iframeLoaded = true;

iframe.src = "http://"+ randomDomain +".com/ads.html";
iframe.height = ".1px";
iframe.width = ".1px";
iframe.id = 'some-ad';
iframe.onload = function() {iframeLoaded = false;};

document.body.appendChild(iframe);

setTimeout(function() { 
    var someAd = document.getElementById('some-ad');
    if(!iframeLoaded ||
       someAd == null || 
       someAd.style.display == "none" || 
       someAd.style.display == "hidden" || 
       someAd.style.visibility == "hidden" || 
       someAd.offsetHeight == 0)
        document.getElementById('ab-message').style.display = 'block';
    someAd.remove();
}, 500);
};
</script>`<br>

Jetzt können Sie die verwenden ab-message ID, wo immer Sie eine Nachricht an Adblock -Benutzer anzeigen möchten:

<div id="ab-message" style="display: none">Your message here!</div>

Beachten Sie, dass der Inline -Stil hinzugefügt wurde, um ihn ursprünglich auszublenden (natürlich können Sie dies auch aus Ihrer eigenen CSS -Datei ausführen).
Beachten Sie auch, dass es 500 ms dauert, das muss darauf warten, dass der Adblocker seine Sache tut, oder es wird nicht funktionieren.

Eine kleine Erklärung, wie dieses Skript funktioniert

Zunächst findet ein Iframe mit einer Quelle eines zufällig generierten Links an. (Es wird zufällig generiert, weil einige Adblocks intelligent sind, irgendwann erkennen sie, dass ein Link gefälscht ist).
Anschließend werden mehrere Überprüfungen dieses Iframe ausgeführt (wenn es erfolgreich geladen wurde oder wenn sein Stil geändert wurde). Wenn einer dieser Tests wahr ist, zeigt er die an ab-message Element für Adblock -Benutzer.

Dieses Skript funktioniert für die meisten (wenn nicht alle) Anzeigenblocker.

EXTRA

Es hätte wirklich keinen Sinn haben können, nur ein Kern zu erstellen, aber stattdessen habe ich ein Github -Projekt erstellt, aber es schau es immer noch aus und spiele es, wenn es dir geholfen hat.
Abdetektor: Einfacher Vanille -JavaScript -Adblock -Detektor.
Genießen.

Sie können dies überprüfen, es kann helfenDetect-Adblocker

Es ist eine Umsetzung von Timing -Antwort

Fügen Sie dies vor einem Skript im Kopf -Tag hinzu:

<head>
    <title></title>
    <meta/>

    <!--adBlocker detection code - START-->
    <script src="//adblocker.fortiapp.com/ads.js"></script>
    <script>
        (function (i, o, g, r) {
            i[o] = (typeof i[o] == typeof undefined) ? g : r
        })(window, 'adblocker', true, false);
    </script>
    <!--adBlocker detection code - END-->

    // Other scripts

</head>

Dann verwenden Sie es später:

if (adblocker) {
    // the add blocker is enabled
}else{
    // ad blocker is not enabled
}

Alle oben genannten Antworten sind gültig, die meisten funktionieren jedoch nicht für die Anzeigenblockierung auf DNS-Ebene.

Anzeigenblocker auf DNS-Ebene (wie Pi-Loch) Return NxDomain (Domain existiert nicht) für eine Liste von Anzeigenblockierungsdomänen (z. B. telemetry.microsoft.com wird "nicht existieren", wenn dies der Fall ist).

Es gibt einige Möglichkeiten, dies zu umgehen:

Methode a: Anfrage für Anzeigen nach IP -Adresse, nicht die Domäne.

Diese Methode ist etwas ärgerlich, da Sie IP -Adressen im Auge behalten müssen. Dies ist problematisch, wenn Ihr Code nicht regelmäßig gut gepflegt oder aktualisiert wird.

Methode b: Block alle fordert dies aus, auch wenn der Client NXDomain meldet.

Dies wird für Benutzer sehr ärgerlich sein, wenn es sich um eine "legitime" NxDomain handelt.

Ich verstehe Ihre Spannung und Sie können überprüfen, ob das Element durch Skript oder Element erstellt wurde. Und wenn wir über Ad-Blocking sprechen, können Sie nur auf die Sichtbarkeit der Elemente zählen, nicht auf die Präsenz von Elementen.

Element, das mit Drittanbieter-Skript erstellt wurde, wird niemals vorhanden sein, dass, wenn das Skript derzeit nicht erreichbar ist (DNS-Fehler, Remote-Webserverfehler, Offline-Webseitenvorladung usw.), und Sie werden immer falsch positiv.

Alle anderen Antworten mit Schecks sind korrekt, aber denken Sie daran.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top