Question

Je voudrais être en mesure de détecter si l'utilisateur utilise un logiciel de logiciel antipub quand ils visitent mon site. S'ils utilisent, je veux afficher un message leur demandant de le mettre hors tension afin de soutenir le projet, comme ce site fait.

Si vous entrez sur ce site et votre navigateur a une sorte de logiciel de Adblock activé, puis le site au lieu de montrer les annonces réelles montre une petite bannière disant aux utilisateurs que les revenus publicitaires est utilisé pour accueillir le projet et ils devraient envisager Adblock tournant au large.

Je veux le faire sur mon site, j'utilise des annonces AdSense sur, comment puis-je faire?

Était-ce utile?

La solution

Ma solution est pas spécifique à un certain réseau publicitaire et est très léger. J'ai fonctionner dans la production pendant quelques années. blocs AdBlock toutes les URL contenant le mot « annonces ». Voilà donc ce que je l'ai fait:

J'ai ajouté un petit fichier js à mon Webroot avec le nom ads.js

Ceci est la seule ligne de code dans ce fichier

var canRunAds = true;

Alors quelque part dans ma page:

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

Les fichiers comme ads.js sont bloqués par au moins ces adblockers sur Chrome:

  • AdBlock
  • Adblock Plus
  • Adblock Pro
  • Ghostery

Mise à jour 15/02/2019:

Ajout Ghostery dans la liste ci-dessus parce que l'extension maintenant bloque également les demandes de ads.js. Très utile. Est-ce que cela signifie que Ghostery est en fait nous aide devs pour détecter le blocage des annonces avec leur extension?

ne fonctionne pas avec:

Confidentialité Badger

Autres conseils

Pas une réponse directe, mais je mettrais le message derrière l'annonce à charger ... plutôt que d'essayer de le détecter, il venait de se montrer quand l'annonce ne fonctionne pas.

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

Avec jQuery:

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

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

Bien sûr, vous devez avoir une page d'atterrissage pour AdblockNotice.html, et les besoins de la classe .myTestAd pour refléter vos contenants publicitaires réels. Mais cela devrait fonctionner.

EDIT

TD_Nijboer recommande, une meilleure façon est d'utiliser le :hidden (ou :visible, comme je l'utilise ci-dessous) de sorte que le sélecteur display: none est également vérifié:

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...
    }
}

Bien sûr, ces deux pourraient être combinés en un seul bloc de if si on le souhaite.

Notez que visibility: hidden ne sera pas capturé soit aussi bien (où les séjours à l'espace de mise en page, mais l'annonce n'est pas visible). Pour vérifier cela, un autre filtre peut être utilisé:

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

Ce qui vous donnera un tableau d'éléments publicitaires qui sont « invisibles » (avec tout être supérieur à 0 étant un problème, en théorie).

Aucune demande supplémentaire. Aucune bibliothèque externe. Tout simplement, simple 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);

  • Vous créez un élément avec la adsbox de classe (tel que défini comme un élément amovible dans le fichier de définition de AdBlock Plus)
  • Vous l'ajoutez au document et après un court pendant que vous lisez son offsetHeight
  • Si AdBlock est installé, l'élément n'aura aucune hauteur.

Crédit poste Christian Heilmann , Je pense qu'il est de loin la meilleure solution pour détecter AdBlock.

La plupart des annonces sont chargés dynamiquement en javascript. Je viens d'utiliser l'événement onerror pour détecter si le script annonce pourrait être chargée ou non. Semble travail.

Exemple avec GoogleAds:

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

Il peut être utilisé sur d'autres éléments aussi bien pour voir si un bloqueur de publicité bloque le contenu. Cette méthode peut produire des faux positifs si les éléments distants n'existe pas ou ne peuvent pas être atteints.

Pour détecter si l'utilisateur bloque annonces, tout ce que vous avez à faire est de trouver une fonction dans le javascript publicitaire et essayer de tester pour elle. Peu importe quelle méthode qu'ils utilisent pour bloquer l'annonce. Voici à quoi il ressemble pour les annonces Google Adsense:

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

Cette méthode est décrite ici: http: // www .metamorphosite.com / détecter-web-popup-bloqueur-logiciel-Adblock-Spam

Ma solution la plus simple avec jquery est:

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

advertisement.js ne contient que rien. Quand quelqu'un utilise Adblock, il échoue et la fonction est appelée.

Je sais qu'il ya des réponses déjà assez, mais étant donné que cette question arrive sur Google recherche pour « détecter Adblock » au sujet, je voulais donner un aperçu au cas où vous ne pas utiliser adsense .

Plus précisément, cet exemple vous pouvez détecter si la valeur par défaut Adblock liste fournie par Firefox Adblock est utilisé. Il profite que dans ce blocklist il y a un élément bloqué avec l'ID CSS #bottomAd. Si je compte un tel élément dans la page et test pour sa hauteur, je sais que si logiciel antipub est actif ou non:

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

Le reste se fait via la jQuery habituelle suspect:

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

Comme on le voit, j'utilise setTimeout avec au moins un délai d'attente de 1 ms. Je l'ai testé cela sur différents navigateurs et la plupart du temps, vérifier directement l'élément ready toujours retourné 0; Peu importe si le adblocker était actif ou non. J'avais deux idées à ce sujet: soit rendu était pas encore fait ou Adblock ne pas botter en encore. Je ne l'ai pas pris la peine d'étudier plus.

Mon conseil est: ne le faites pas

Tout scénario où vous traitez les gens comme des « fautifs » va entraîner les défendre.

Voici ma proposition.

Mettez un petit message de discret en haut de la page (que les annonces sont bloquées) avec le texte I *totally* respect your right to block ads et un lien vers une autre page / Read more ... intitulé pop-up.

Sur l'autre page, indiquent clairement que vous comprenez qu'il est leur ordinateur et ils sont libres d'utiliser le blocage des publicités.

Aussi faire effacer d'une manière non accusatoire que l'utilisation de ces bloqueurs pour vous rend plus difficile de livrer un excellent contenu (ce qui explique pourquoi en détail) et que, pendant que vous préféreriez l'annonce de blocage pour ne pas se produire sur votre site, il est tout à fait leur décision. Mettre l'accent sur les aspects positifs de mise hors tension de blocage.

Ceux qui sont farouchement opposés à des annonces ignorera cela, mais vous n'avait aucune chance de les convaincre de toute façon. Ceux qui sont indifférents peut bien influencer par votre appel puisque vous ne faites pas tout le « laissez-moi mon chemin ou je vais prendre ma balle et rentrer à la maison » chose qui devrait honnêtement être le domaine exclusif des enfants âgés de cinq ans.

Rappelez-vous, personne ne tenait une arme à feu à votre tête et vous a forcé à mettre vos trucs sur le net. Traiter vos lecteurs / utilisateurs avec respect et vous trouverez probablement un bon nombre d'entre eux échangerai.

Ils sont en utilisant le fait que le code d'annonce de Google crée un iframe avec l'id « iframe ». Donc, tant que vous ne l'avez pas déjà quelque chose sur votre page avec cet ID, le travail this'd pour vous aussi.

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

J'ai remarqué des commentaires précédents utilise Google adsense comme objet à tester. Certaines pages n'utilise pas adsense, et en utilisant adsense bloc comme test n'est pas vraiment une bonne idée. Parce que le bloc adsense peut nuire à votre référencement. Voici par exemple comment je perçois par simple adblocker classe bloquée:

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" est un identifiant qui bloque de AdBlocker. Donc, vérifier si elle est visible, vous êtes en mesure de détecter si adblocker est activée.

Il suffit d'ajouter petit script sur votre site:

var isAdsDisplayed = true;

Avec nom adsbygoogle.js

Alors ne suit:

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

AdBlock semble bloquer le chargement des fichiers JavaScript AdSense (etc). Donc, si vous utilisez la version asynchrone des annonces AdSense, vous pouvez vérifier si adsbygoogle est un Array. Cela doit être vérifié après quelques secondes depuis le script asynchrone est ... asynchrone. Voici une rude aperçu :

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

Pour clarifier, voici un exemple de ce que le code des annonces AdSense asynchrone ressemble à:

<!-- 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>

Notez que adsbygoogle est initialisé comme un tableau. La bibliothèque adsbygoogle.js change ce tableau dans Object {push: ...} quand il exécute. Contrôle du type de variable après un certain temps peut vous dire si le script a été chargé.

Cette approche que je l'utilise sur mon site, peut-être vous sera utile. À mon avis, il est le simpliest solution.

blocs AdBlocker classes spécifiques et des éléments HTML, en inspectant ces sélecteurs de toutes les annonces bloquées dans la console développeur (ils sont tous répertoriés) vous pouvez voir quels éléments seront toujours bloqués.

par exemple. inspecter juste cette page question sur stackoverflow et vous verrez série d'annonces bloquées.

Par exemple, tout élément avec classe bottom-ad est automatiquement bloqué.

  1. Je créé un élément div non vide avec classe bottom-ad: <div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
  2. Après chargement de la page juste vérifier si cet élément est caché. Je jQuery, mais je me sens libre d'utiliser javascript: $('.bottom-ad').css('display') == "none" ou mieux encore à l'aide $('.bottom-ad').is(':visible')

Si la valeur est true, alors AdBlocker est actif.

Vous n'avez pas besoin d'une requête HTTP supplémentaire, vous pouvez calculer simplement la hauteur d'un add faux.

Par ailleurs, voici une liste complète correspondant aux éléments adblockers éviter le rendu.

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>

la façon dont la sécurité est d'envelopper vos annonces dans <div> et vérifier la hauteur

<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);

il fonctionne avec Adblock plus et BLUEHELL pare-feu.

Un moyen efficace de vérifier s'il y a un Adblock: consultez s'il est Adblock activé en essayant de déclencher l'URL des annonces de Google. Si oui alors la callback_has_adblock courir, sinon puis exécutez le callback_no_adblock. Cette solution coûte une demande plus, mais au moins cela fonctionne:

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();
    });
};

Cette solution fonctionne pour toutes sortes d'annonces, non seulement google adsense.

Si vous utilisez le nouveau code AdSense, vous pouvez faire un contrôle facile, avec des recours à des contrôles de contenu ou css.

Placez vos annonces comme d'habitude dans votre balisage:

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

Ensuite, vous appelez le code adsense au bas de votre page (note ne pas utiliser le drapeau "async" lorsque vous appelez le script adsbygoogle.js):

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

Ensuite, ajoutez ce petit snippit code ci-dessous que:

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

AdSense crée toujours / définit le drapeau adsbygoogle.loaded à true lorsque les annonces sont chargées, vous pouvez placer le contrôle dans une fonction setTimeout pour retarder la vérification de quelques secondes.

En dépit de l'âge de cette question, j'ai récemment trouvé très utile et ne peut donc supposer qu'il existe d'autres encore la visualisation. Après avoir regardé ici et d'ailleurs, je devinais que les trois principaux contrôles côté client pour détecter indirectement un bloqueur de publicité devaient vérifier div / img bloqué, bloqué iframes et ressources bloquées (fichiers javascript).

Peut-être qu'il est sur le dessus ou paranoïaque, mais il couvre pour les systèmes de blocage des publicités ce bloc seulement un ou deux de la sélection et donc ne pas avoir fait l'objet que vous aviez fait une vérification.

Sur la page de votre sont en cours d'exécution les chèques ajouter: (J'utilise 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>

et ajoutez ce qui suit partout ailleurs sur la page:

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

J'utilisé un div avec un nom d'appât, ainsi que d'une image hébergée en externe avec le texte « Annonce » et dans les dimensions utilisées par AdSense (grâce à placehold.it!).

Dans advertisement.js vous devez ajouter quelque chose au document que nous pouvons vérifier plus tard. Bien qu'il semble que vous faites la même chose qu'avant, vous vérifiez effectivement le fichier (advertisement.js) étant lui-même chargé, pas la sortie.

$(document).ready(
{

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

});

Et le script de détection de bloqueur de publicité qui combine tout

$(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);

});

Lorsque le document est prêt , à savoir le balisage est chargé, nous ajoutons le iframe au document aussi. Ensuite, lorsque la fenêtre est chargé , à savoir le contenu incl. images, etc. est chargé, nous vérifions:

  • Les dimensions et la visibilité de la première div test.
  • Que le contenu du deuxième div test est "vérification", comme il aurait été si le advertimsent.js était pas bloqué.
  • Les dimensions (et je suppose que la visibilité, comme un objet caché n'a pas de hauteur ou la largeur?) De l'iframe

Et les styles:

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

div#myTestAd2
{
    display: none;
}

Hope this helps

La plupart adblocker annuler HTTP demande à ads.js et faire 0px pour l'élément mais adblocker quelque temps de supprimé le DOM , et une réponse ci-dessus échouera car ne pas vérifier l'existence de l'élément.

L'utilisation setTimeout() est une bonne pratique, car sans elle, fera la course de script avec adblocker.

Le script ci-dessous vérifiera si exist dom / enlevé et le contrôle offsetHeight d'un élément si elle existe.

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>

Je sais que cela a déjà répondu, mais j'ai regardé sur le site échantillon suggéré, et je vois qu'ils le font comme ceci:

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

Pas besoin de délais d'attente et renifler DOM. essayez simplement de charger un script de réseaux publicitaires populaires, et voir si le dresseur d'annonce intercepté la requête HTTP.

/**
 * 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';
});

Il suffit de créer mon propre « plugin » pour résoudre cela et cela fonctionne très bien:

adBuddy + jsBuddy:

ADBuddy JSBuddy GitHub

J'ai ajouté la compatibilité mobile et la détection jsBlocking entre autres ... (comme une superposition qui est présentée aux utilisateurs en leur demandant de désactiver le logiciel antipub / jsBlocking logiciel); Aussi fait réponse amicale.

Il est opensourced sous la Coffeeware de licence.

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

et dans le fichier getbanner.cfm:

adb = false;

Je pense que ce moyen est plus facile de détecter Adblock.

est ce qui a fonctionné pour moi:

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

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

timing's réponse est bien Pensé mais pas plus de travail, donc je l'ai mis à jour le nom du fichier js à « adsense » de « annonces » et il fonctionne en arrière comme un charme!

Voici le code, peut-être ce que quelqu'un wil aide:

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

Dans le fichier Js vient de mettre cette ligne: var adblockDetecter = true;

Maintenant, il y a une meilleure façon de le faire en utilisant un simple script JS appelé AdBlock Détecteur
Voici comment l'utiliser:
Ajoutez ceci à votre section <head>:

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

Maintenant, vous pouvez utiliser l'identifiant de ab-message où vous souhaitez afficher un message aux utilisateurs AdBlock:

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

Notez le style en ligne ajouté à cacher l'origine (Bien sûr, vous pouvez aussi le faire à partir de votre propre fichier CSS).
Notez également qu'il prend 500ms, c'est parce qu'il doit attendre la adblocker pour faire sa chose ou il ne fonctionnera pas.

Une petite explication de la façon dont fonctionne ce script

Tout d'abord, il ajoute une iframe avec une source d'un lien généré de façon aléatoire. (Il est généré au hasard parce que certains adblocks sont intelligents, à un moment donné, ils réalisent un lien est faux).
Ensuite, il exécute plusieurs contrôles sur cette iframe (si elle était chargée avec succès ou si son style a été modifié). Si l'un de ces tests est vrai, il affiche alors l'élément de ab-message aux utilisateurs Adblock.

Ce script fonctionne pour la plupart (sinon tous) bloqueurs de publicité.

EXTRA

Aucun point, vraiment, aurait pu vient de créer un point essentiel, mais je créé un projet Github, mais encore, vérifier et étoile si elle vous a aidé
abDetector. vanille simple JavaScript AdBlock Détecteur
Profitez.

Vous pouvez vérifier cela il pourrait aider détecter-adblocker

L'une implémentation de

Ajoutez cette avant tout script dans la balise head:

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

Ensuite, utilisez plus tard:

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

Toutes les réponses ci-dessus sont valables, mais la plupart ne fonctionnera pas pour le blocage ad niveau DNS.

bloqueurs de publicité au niveau DNS (comme pi-trou) retour essentiellement NXDOMAIN (domaine n'existe pas) pour une liste des domaines de blocage des publicités (par exemple telemetry.microsoft.com sera « ne pas exister » quand il le fait).

Il y a quelques façons de contourner ceci:

Méthode A :. Demande d'annonces par adresse IP, pas dans le domaine

Cette méthode est un peu ennuyeux que vous devez garder une trace des adresses IP. Ce sera un problème si votre code n'est pas bien entretenu ou mis à jour régulièrement.

Méthode B :. Bloquer tous demande que FAIL même si les rapports client NXDOMAIN

Ce sera très ennuyeux pour les utilisateurs si elle est un NXDOMAIN « légitime ».

Je comprends votre tension et vous pouvez vérifier si l'élément a été créé par script ou élément est caché. Et si l'on parle de blocage des publicités que vous pouvez compter que sur la visibilité de l'élément, non pas sur la présence de l'élément.

élément créé avec le script tiers ne sera jamais présent, que si le script est pas accessible au moment (erreur de DNS, erreur de serveur web à distance, pré-charge page web en ligne, etc.), et vous aurez toujours faux positif.

Toutes les autres réponses avec contrôles sont corrects, mais gardez cela à l'esprit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top