J'aimerais pouvoir détecter si un utilisateur utilise un logiciel adblocking lorsqu'il visite mon site Web. S'ils l'utilisent, je souhaite afficher un message leur demandant de l'éteindre afin de soutenir le projet, comme ce site Web fait.
Si vous accédez à ce site et que votre navigateur dispose d'une sorte de logiciel adblock activé, le site au lieu d'afficher les annonces réelles affiche une petite bannière indiquant aux utilisateurs que les revenus publicitaires sont utilisés pour l'hébergement du projet et qu'ils devraient envisager de désactiver Adblock. .
Je veux le faire sur mon site Web, j'utilise des annonces adsense dessus, comment puis-je le faire?
Ma solution n'est pas spécifique à un certain réseau publicitaire et est très légère. Je l’utilise en production depuis quelques années. AdBlock bloque toutes les URL contenant le mot "annonces". Alors voici ce que j'ai fait:
J'ai ajouté un petit fichier js à ma racine Web avec le nom ads.js
C'est la seule ligne de code dans ce fichier
var canRunAds = true;
Puis 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>
Des fichiers tels que ads.js sont bloqués par au moins ces adblockers sur Chrome:
Mise à jour le 2019-02-15:
Ghostery a été ajouté à la liste ci-dessus car son extension bloque désormais également les requêtes adressées à ads.js. Très utile. Cela signifie-t-il que Ghostery nous aide réellement à détecter le blocage des annonces avec leur extension?
Ne fonctionne pas avec:
Privacy Badger
Pas une réponse directe, mais je mettrais le message derrière la publicité pour qu'il soit chargé ... plutôt que d'essayer de le détecter, il s'afficherait uniquement lorsque la publicité ne le ferait 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 entendu, vous aurez besoin d'une page d'arrivée pour AdblockNotice.html, et la classe .myTestAd doit refléter vos conteneurs d'annonces réels. Mais ça devrait marcher.
MODIFIER
Comme le recommande TD_Nijboer, un meilleur moyen consiste à utiliser le sélecteur :hidden
(ou :visible
, comme je l'utilise ci-dessous) afin que display: none
soit é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 entendu, ces deux éléments peuvent être combinés en un seul bloc if
si vous le souhaitez.
Notez que visibility: hidden
ne sera pas capturé non plus (où l’espace de présentation reste, mais où 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 d'annonce "invisibles" (tout élément supérieur à 0
étant un problème, en théorie).
Pas de demandes supplémentaires. Pas de bibliothèques externes. JavaScript simple et simple:
var adBlockEnabled = false;
var testAd = document.createElement('div');
testAd.innerHTML = ' ';
testAd.className = 'adsbox';
document.body.appendChild(testAd);
window.setTimeout(function() {
if (testAd.offsetHeight === 0) {
adBlockEnabled = true;
}
testAd.remove();
console.log('AdBlock Enabled? ', adBlockEnabled)
}, 100);
Merci au message de Christian Heilmann , je pense que c'est de loin la meilleure solution pour détecter AdBlock.
La plupart des annonces sont chargées dynamiquement en javascript. Je viens d'utiliser l'événement onerror pour déterminer si le script publicitaire peut être chargé ou non. Semble travailler.
Exemple avec GoogleAds:
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" onerror="adBlockFunction();"></script>
Cela peut également être utilisé sur d'autres éléments pour voir si un bloqueur de publicité bloque le contenu. Cette méthode peut produire des faux positifs si les éléments distants n'existent pas ou ne peuvent pas être atteints.
Pour détecter si l'utilisateur bloque les publicités, il vous suffit de rechercher une fonction dans le javascript de la publicité et d'essayer de la tester. Peu importe la méthode utilisée pour bloquer l'annonce. Voici à quoi cela 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/detect-web-popup-blocker-software-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 rien. Lorsque quelqu'un utilise adblock, il échoue et la fonction est appelée.
Je sais qu'il y a déjà suffisamment de réponses, mais comme cette question est posée sur Google dans la recherche sur "détecter un bloc" sur le sujet, je souhaitais vous éclairer au cas où vous êtes n'utilisez pas adsense.
Plus précisément, avec cet exemple, vous pouvez détecter si la liste Adblock par défaut fournie par Firefox Adblock est utilisée. Il est à noter que dans cette liste de blocage, un élément est bloqué avec l'identifiant CSS #bottomAd
. Si j'inclus un tel élément dans la page et que je teste sa hauteur, je sais si adblocking est actif ou non:
<!-- some code before -->
<div id="bottomAd" style="font-size: 2px;"> </div>
<!-- some code after -->
Le reste se fait via le suspect habituel jQuery:
$(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 peut le constater, j’utilise setTimeout
avec au moins un délai d’attente de 1 ms. J'ai testé cela sur différents navigateurs et la plupart du temps, la recherche directe de l'élément dans ready
renvoyait toujours 0; peu importe si l'adblocker était actif ou non. J'avais deux idées à ce sujet: soit le rendu n'était pas encore terminé, soit Adblock n'avait pas encore commencé. Je n'ai pas pris la peine d'enquêter plus avant.
Mon conseil est: ne le faites pas!
Tout scénario dans lequel vous traitez les gens comme des "malfaiteurs" va les amener à riposter.
Voici ma proposition.
Placez un petit message discret en haut de la page (que les annonces soient bloquées ou non) avec le texte I *totally* respect your right to block ads
et un lien vers une autre page/fenêtre contextuelle intitulée Read more ...
.
Sur l'autre page, indiquez clairement que vous comprenez que c'est leur ordinateur et qu'ils sont libres d'utiliser le blocage des publicités.
Indiquez également clairement de manière non accusatoire que l'utilisation de ces bloqueurs vous empêche de diffuser un contenu de qualité (en expliquant pourquoi en détail) et que, même si vous préférez que le blocage des publicités ne se produise pas sur votre site, c'est totalement leur décision. Concentrez-vous sur les avantages de désactiver le blocage.
Ceux qui s'opposent avec véhémence aux publicités l'ignoreront, mais vous n'avez jamais eu la moindre chance de les convaincre. Ceux qui sont indifférents pourraient bien être séduits par votre appel puisque vous ne faites pas la chose "laisse-moi aller comme je veux ou je vais prendre ma balle et rentrer à la maison", ce qui honnêtement devrait être le domaine exclusif des enfants de cinq ans.
Rappelez-vous que personne ne vous a tenu un pistolet sur la tête et vous a forcé à mettre vos affaires sur le filet. Traitez votre lectorat/vos utilisateurs avec respect et vous constaterez probablement qu'un bon nombre d'entre eux vous rendront la pareille.
Ils utilisent le fait que le code d'annonce de Google crée un iframe avec l'identifiant "iframe". Donc, tant que vous n'avez pas déjà quelque chose sur votre page avec cet ID, cela fonctionnerait aussi pour vous.
<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é que les commentaires précédents utilisaient google adsense comme objet à tester. Certaines pages n'utilisent pas adsense et utiliser le bloc adsense comme test n'est pas vraiment une bonne idée. Parce que le bloc adsense peut nuire à votre référencement. Voici comment je détecte par adblocker une classe bloquée simple:
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 bloqué par adblocker. En vérifiant si elle est visible, vous êtes en mesure de détecter si adblocker est activé.
Cette approche que j’utilise sur mon site, vous la trouverez peut-être utile. À mon avis, c'est la solution {la plus simple}.
AdBlocker bloque des classes et des éléments HTML spécifiques. En examinant ces sélecteurs de toutes les annonces bloquées dans la console du développeur (elles sont toutes répertoriées), vous pouvez voir quels éléments seront toujours bloqués.
Par exemple. Il suffit de consulter cette page de questions sur stackoverflow et vous verrez un tas d’annonces bloquées.
Par exemple, tout élément avec la classe bottom-ad
est automatiquement bloqué.
bottom-ad
: <div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
$('.bottom-ad').css('display') == "none"
ou même mieux en utilisant $('.bottom-ad').is(':visible')
Si la valeur est true
, AdBlocker est actif.
AdBlock semble bloquer le chargement des fichiers JavaScript AdSense (etc.). Par conséquent, si vous utilisez une version asynchrone des annonces AdSense, vous pouvez vérifier si adsbygoogle
est une Array
. Cela doit être vérifié après quelques secondes car le script asynchrone est ... asynchrone. Voici un ébauche :
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 du code d'annonce publicitaire asynchrone AdSense:
<!-- 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é en tant que tableau. La bibliothèque adsbygoogle.js
change ce tableau en Object {Push: ...}
lors de son exécution. Vérifier le type de variable après un certain temps peut vous dire si le script a été chargé.
Ajoutez simplement un petit script sur votre site:
var isAdsDisplayed = true;
Avec le nom adsbygoogle.js
Ensuite, faites ce qui suit:
<script src="/js/adsbygoogle.js"></script>
<script>
if(window.isAdsDisplayed === undefined ) {
// AdBlock is enabled. Show message or track custom data here
}
</script>
Trouvé cette solution ici
Vous n'avez pas besoin d'une requête HTTP supplémentaire, vous pouvez simplement calculer la hauteur d'un faux ajout.
À propos, voici une liste full correspondant aux éléments que les bloqueurs de messages évitent de rendre.
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>
le moyen le plus sûr est d’envelopper vos annonces dans <div>
et de vérifier leur 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);
cela fonctionne avec adblock plus et le pare-feu bluehell.
Un moyen efficace de vérifier s’il existe un bloc publicitaire: Il suffit de vérifier si un bloc publicitaire est activé en essayant de déclencher l’URL des annonces google. Si oui, exécutez le callback_has_adblock, sinon, exécutez le callback_no_adblock. Cette solution coûte une demande de plus mais au moins ça marche:
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 tout type d'annonce, pas seulement Google Adsense.
Si vous utilisez le nouveau code AdSense, vous pouvez effectuer une vérification simple sans recourir à des vérifications de contenu ou de CSS.
Placez vos annonces normalement 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 en en bas de votre page (remarque ne pas utilisez le drapeau "async"
lorsque vous appelez le script adsbygoogle.js
):
<script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
Ajoutez ensuite ce petit extrait de code ci-dessous:
<script>
if (!adsbygoogle.loaded) {
// do something to alert the user
}
</script>
AdSense crée/définit toujours l'indicateur adsbygoogle.loaded
sur true
lorsque les annonces sont chargées. Vous pouvez placer la vérification dans une fonction setTimeout pour retarder la vérification de quelques secondes.
Malgré l'âge de cette question, je l'ai récemment trouvée très utile et je ne peux donc que supposer que d'autres la consultent encore. Après avoir regardé ici et ailleurs, j'ai supposé que les trois principaux contrôles côté client pour la détection indirecte d'un bloqueur de publicité consistaient à vérifier le blocage de div
/img
, de iframe
s bloqué et de ressources bloquées (fichiers javascript).
C'est peut-être excessif ou paranoïaque, mais cela couvre les systèmes de blocage de publicités qui ne bloquent qu'une ou deux des sélections et qui, par conséquent, n'auraient peut-être pas été couverts si vous n'aviez effectué que la vérification.
Sur la page où vous exécutez les contrôles, ajoutez: (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 les éléments suivants ailleurs sur la page:
<div id="myTestAd"><img src="http://placehold.it/300x250/000000/ffffff.png&text=Advert" /></div>
J'ai utilisé une div avec un nom d'appât ainsi qu'une image hébergée en externe avec le texte "Advert" et dans les dimensions utilisées par AdSense (grâce à placehold.it!).
Dans advertisement.js
, vous devriez ajouter quelque chose au document que nous pourrons vérifier ultérieurement. Bien qu'il semble que vous fassiez la même chose qu'avant, vous êtes en train de vérifier si le fichier (advertisement.js
) est lui-même chargé, pas la sortie.
$(document).ready(
{
$("body").append("<div id=\"myTestAd2\">check</div>");
});
Et puis 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 , c'est-à-dire que le balisage est chargé, nous ajoutons également l'iframe au document. Ensuite, lorsque la fenêtre est chargée , c'est-à-dire le contenu incl. images etc. est chargé, nous vérifions:
advertimsent.js
était not bloqué.Et les styles:
div#myTestAd, iframe#adServer
{
display: block;
position: absolute;
left: -9999px;
top: -9999px;
}
div#myTestAd2
{
display: none;
}
J'espère que cela t'aides
Pas besoin de délais d'expiration ni de reniflage de DOM. Essayez simplement de charger un script à partir de réseaux publicitaires populaires et voyez si le bloqueur de publicité a 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';
});
Je viens de créer mon propre "plugin" pour résoudre ce problème et cela fonctionne vraiment bien:
adBuddy + jsBuddy:
J'ai ajouté la compatibilité mobile et la détection jsBlocking, entre autres ... (comme une superposition présentée aux utilisateurs en leur demandant de désactiver le logiciel adBlocking/jsBlocking); Également rendu réactif amical.
Il est ouvert sous la licence Coffeeware License .
Je sais que cela a déjà été répondu, mais j’ai examiné le site exemple proposé 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>
Exécutez ceci avec adblock on et collez-le dans votre pied de page avant la fermeture de la balise </body>
sur votre page.
<script type="text/javascript" charset="utf-8">
// Place this code snippet near the footer of your page before the close of the /body tag
//
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';q O=\'\',29=\'1W\';1S(q i=0;i<12;i++)O+=29.X(B.N(B.K()*29.F));q 2z=1,2u=4p,2v=4o,2x=4n,33=C(e){q i=!1,o=C(){z(k.1g){k.2T(\'2J\',t);D.2T(\'1V\',t)}S{k.2V(\'2L\',t);D.2V(\'27\',t)}},t=C(){z(!i&&(k.1g||4m.2E===\'1V\'||k.2O===\'2K\')){i=!0;o();e()}};z(k.2O===\'2K\'){e()}S z(k.1g){k.1g(\'2J\',t);D.1g(\'1V\',t)}S{k.2M(\'2L\',t);D.2M(\'27\',t);q n=!1;2P{n=D.4k==4j&&k.23}2U(r){};z(n&&n.2Q){(C a(){z(i)G;2P{n.2Q(\'17\')}2U(t){G 4i(a,50)};i=!0;o();e()})()}}};D[\'\'+O+\'\']=(C(){q e={e$:\'1W+/=\',4h:C(t){q a=\'\',d,n,i,c,s,l,o,r=0;t=e.t$(t);1a(r<t.F){d=t.14(r++);n=t.14(r++);i=t.14(r++);c=d>>2;s=(d&3)<<4|n>>4;l=(n&15)<<2|i>>6;o=i&63;z(2Z(n)){l=o=64}S z(2Z(i)){o=64};a=a+U.e$.X(c)+U.e$.X(s)+U.e$.X(l)+U.e$.X(o)};G a},11:C(t){q n=\'\',d,l,c,s,r,o,a,i=0;t=t.1C(/[^A-4g-4f-9\\+\\/\\=]/g,\'\');1a(i<t.F){s=U.e$.1I(t.X(i++));r=U.e$.1I(t.X(i++));o=U.e$.1I(t.X(i++));a=U.e$.1I(t.X(i++));d=s<<2|r>>4;l=(r&15)<<4|o>>2;c=(o&3)<<6|a;n=n+P.T(d);z(o!=64){n=n+P.T(l)};z(a!=64){n=n+P.T(c)}};n=e.n$(n);G n},t$:C(e){e=e.1C(/;/g,\';\');q n=\'\';1S(q i=0;i<e.F;i++){q t=e.14(i);z(t<1s){n+=P.T(t)}S z(t>4e&&t<4d){n+=P.T(t>>6|4c);n+=P.T(t&63|1s)}S{n+=P.T(t>>12|2F);n+=P.T(t>>6&63|1s);n+=P.T(t&63|1s)}};G n},n$:C(e){q i=\'\',t=0,n=4a=1u=0;1a(t<e.F){n=e.14(t);z(n<1s){i+=P.T(n);t++}S z(n>3V&&n<2F){1u=e.14(t+1);i+=P.T((n&31)<<6|1u&63);t+=2}S{1u=e.14(t+1);2f=e.14(t+2);i+=P.T((n&15)<<12|(1u&63)<<6|2f&63);t+=3}};G i}};q a=[\'49==\',\'48\',\'47=\',\'46\',\'45\',\'44=\',\'43=\',\'42=\',\'41\',\'40\',\'3Z=\',\'3Y=\',\'3X\',\'3W\',\'4q=\',\'4b\',\'4r=\',\'4J=\',\'4L=\',\'4M=\',\'4N=\',\'4O=\',\'4P==\',\'4Q==\',\'4K==\',\'4R==\',\'4T=\',\'4U\',\'4V\',\'4W\',\'4X\',\'4Y\',\'4S\',\'4I==\',\'4t=\',\'3T=\',\'4G=\',\'4F==\',\'4E=\',\'4D\',\'4C=\',\'4B=\',\'4A==\',\'4z=\',\'4y==\',\'4x==\',\'4w=\',\'4v=\',\'4u\',\'4s==\',\'3U==\',\'3A\',\'3S==\',\'3k=\'],y=B.N(B.K()*a.F),w=e.11(a[y]),Y=w,Q=1,v=\'#3m\',r=\'#3n\',W=\'#3g\',g=\'#3j\',Z=\'\',b=\'3h!\',p=\'3e 3f 3d 3c\\\'3a 39 38 2n 2m. 3o\\\'s 3l. 3q 3F\\\'t?\',f=\'3R 3Q 3P-3O, 3N 3L\\\'t 3K 3J U 3I 3E.\',s=\'I 3r, I 3D 3C 3B 2n 2m. 3x 3w 3v!\',i=0,u=0,n=\'3u.3t\',l=0,L=t()+\'.2k\';C h(e){z(e)e=e.1R(e.F-15);q i=k.2C(\'3M\');1S(q n=i.F;n--;){q t=P(i[n].1H);z(t)t=t.1R(t.F-15);z(t===e)G!0};G!1};C m(e){z(e)e=e.1R(e.F-15);q t=k.3s;x=0;1a(x<t.F){1n=t[x].1P;z(1n)1n=1n.1R(1n.F-15);z(1n===e)G!0;x++};G!1};C t(e){q n=\'\',i=\'1W\';e=e||30;1S(q t=0;t<e;t++)n+=i.X(B.N(B.K()*i.F));G n};C o(i){q o=[\'3z\',\'3G==\',\'3H\',\'3p\',\'2W\',\'3i==\',\'3b=\',\'37==\',\'4Z=\',\'4H==\',\'52==\',\'5i==\',\'6z\',\'6u\',\'6r\',\'2W\'],r=[\'35=\',\'6B==\',\'6t==\',\'6x==\',\'6d=\',\'6n\',\'62=\',\'6c=\',\'35=\',\'51\',\'6g==\',\'6k\',\'6l==\',\'61==\',\'5X==\',\'6m=\'];x=0;1O=[];1a(x<i){c=o[B.N(B.K()*o.F)];d=r[B.N(B.K()*r.F)];c=e.11(c);d=e.11(d);q a=B.N(B.K()*2)+1;z(a==1){n=\'//\'+c+\'/\'+d}S{n=\'//\'+c+\'/\'+t(B.N(B.K()*20)+4)+\'.2k\'};1O[x]=26 1T();1O[x].1X=C(){q e=1;1a(e<7){e++}};1O[x].1H=n;x++}};C M(e){};G{2X:C(e,r){z(6j k.J==\'6i\'){G};q i=\'0.1\',r=Y,t=k.1d(\'1y\');t.1k=r;t.j.1h=\'1D\';t.j.17=\'-1o\';t.j.V=\'-1o\';t.j.1t=\'2b\';t.j.13=\'6h\';q d=k.J.2p,a=B.N(d.F/2);z(a>15){q n=k.1d(\'2d\');n.j.1h=\'1D\';n.j.1t=\'1r\';n.j.13=\'1r\';n.j.V=\'-1o\';n.j.17=\'-1o\';k.J.5Y(n,k.J.2p[a]);n.1f(t);q o=k.1d(\'1y\');o.1k=\'2h\';o.j.1h=\'1D\';o.j.17=\'-1o\';o.j.V=\'-1o\';k.J.1f(o)}S{t.1k=\'2h\';k.J.1f(t)};l=6b(C(){z(t){e((t.1Y==0),i);e((t.21==0),i);e((t.1K==\'2H\'),i);e((t.1Q==\'2g\'),i);e((t.1J==0),i)}S{e(!0,i)}},28)},1G:C(t,c){z((t)&&(i==0)){i=1;D[\'\'+O+\'\'].1z();D[\'\'+O+\'\'].1G=C(){G}}S{q f=e.11(\'6a\'),u=k.69(f);z((u)&&(i==0)){z((2u%3)==0){q l=\'68=\';l=e.11(l);z(h(l)){z(u.1F.1C(/\\s/g,\'\').F==0){i=1;D[\'\'+O+\'\'].1z()}}}};q y=!1;z(i==0){z((2v%3)==0){z(!D[\'\'+O+\'\'].2y){q d=[\'67==\',\'66==\',\'6o=\',\'5Z=\',\'6p=\'],m=d.F,r=d[B.N(B.K()*m)],a=r;1a(r==a){a=d[B.N(B.K()*m)]};r=e.11(r);a=e.11(a);o(B.N(B.K()*2)+1);q n=26 1T(),s=26 1T();n.1X=C(){o(B.N(B.K()*2)+1);s.1H=a;o(B.N(B.K()*2)+1)};s.1X=C(){i=1;o(B.N(B.K()*3)+1);D[\'\'+O+\'\'].1z()};n.1H=r;z((2x%3)==0){n.27=C(){z((n.13<8)&&(n.13>0)){D[\'\'+O+\'\'].1z()}}};o(B.N(B.K()*3)+1);D[\'\'+O+\'\'].2y=!0};D[\'\'+O+\'\'].1G=C(){G}}}}},1z:C(){z(u==1){q E=2A.6s(\'2B\');z(E>0){G!0}S{2A.6y(\'2B\',(B.K()+1)*28)}};q h=\'6f==\';h=e.11(h);z(!m(h)){q c=k.1d(\'5u\');c.1Z(\'5V\',\'5r\');c.1Z(\'2E\',\'1m/5q\');c.1Z(\'1P\',h);k.2C(\'5o\')[0].1f(c)};5n(l);k.J.1F=\'\';k.J.j.16+=\'R:1r !19\';k.J.j.16+=\'1B:1r !19\';q L=k.23.21||D.36||k.J.21,y=D.5m||k.J.1Y||k.23.1Y,a=k.1d(\'1y\'),Q=t();a.1k=Q;a.j.1h=\'2r\';a.j.17=\'0\';a.j.V=\'0\';a.j.13=L+\'1x\';a.j.1t=y+\'1x\';a.j.2G=v;a.j.24=\'5l\';k.J.1f(a);q d=\'<a 1P="5k://5j.5W" j="H-1e:10.5h;H-1j:1i-1l;1c:5f;">1U 53 5e</a>\';d=d.1C(\'5d\',t());d=d.1C(\'5c\',t());q o=k.1d(\'1y\');o.1F=d;o.j.1h=\'1D\';o.j.1A=\'1L\';o.j.17=\'1L\';o.j.13=\'5b\';o.j.1t=\'5a\';o.j.24=\'2l\';o.j.1J=\'.6\';o.j.2e=\'2j\';o.1g(\'59\',C(){n=n.58(\'\').57().56(\'\');D.2D.1P=\'//\'+n});k.1E(Q).1f(o);q i=k.1d(\'1y\'),M=t();i.1k=M;i.j.1h=\'2r\';i.j.V=y/7+\'1x\';i.j.5s=L-5g+\'1x\';i.j.5t=y/3.5+\'1x\';i.j.2G=\'#5I\';i.j.24=\'2l\';i.j.16+=\'H-1j: "5U 5T", 1v, 1w, 1i-1l !19\';i.j.16+=\'5S-1t: 5R !19\';i.j.16+=\'H-1e: 5Q !19\';i.j.16+=\'1m-1p: 1q !19\';i.j.16+=\'1B: 5P !19\';i.j.1K+=\'1U\';i.j.2I=\'1L\';i.j.5O=\'1L\';i.j.5N=\'2q\';k.J.1f(i);i.j.5L=\'1r 5K 5J -5H 5v(0,0,0,0.3)\';i.j.1Q=\'32\';q Y=30,w=22,x=18,Z=18;z((D.36<34)||(5G.13<34)){i.j.2S=\'50%\';i.j.16+=\'H-1e: 5E !19\';i.j.2I=\'5C;\';o.j.2S=\'65%\';q Y=22,w=18,x=12,Z=12};i.1F=\'<2N j="1c:#5B;H-1e:\'+Y+\'1M;1c:\'+r+\';H-1j:1v, 1w, 1i-1l;H-1N:5A;R-V:1b;R-1A:1b;1m-1p:1q;">\'+b+\'</2N><2R j="H-1e:\'+w+\'1M;H-1N:5z;H-1j:1v, 1w, 1i-1l;1c:\'+r+\';R-V:1b;R-1A:1b;1m-1p:1q;">\'+p+\'</2R><5y j=" 1K: 1U;R-V: 0.2Y;R-1A: 0.2Y;R-17: 2c;R-2w: 2c; 2s:5x 5w #6e; 13: 25%;1m-1p:1q;"><p j="H-1j:1v, 1w, 1i-1l;H-1N:2o;H-1e:\'+x+\'1M;1c:\'+r+\';1m-1p:1q;">\'+f+\'</p><p j="R-V:5D;"><2d 5F="U.j.1J=.9;" 5M="U.j.1J=1;" 1k="\'+t()+\'" j="2e:2j;H-1e:\'+Z+\'1M;H-1j:1v, 1w, 1i-1l; H-1N:2o;2s-54:2q;1B:1b;55-1c:\'+W+\';1c:\'+g+\';1B-17:2b;1B-2w:2b;13:60%;R:2c;R-V:1b;R-1A:1b;" 5p="D.2D.6A();">\'+s+\'</2d></p>\'}}})();D.2t=C(e,t){q n=6v.6w,i=D.6q,a=n(),o,r=C(){n()-a<t?o||i(r):e()};i(r);G{3y:C(){o=1}}};q 2i;z(k.J){k.J.j.1Q=\'32\'};33(C(){z(k.1E(\'2a\')){k.1E(\'2a\').j.1Q=\'2H\';k.1E(\'2a\').j.1K=\'2g\'};2i=D.2t(C(){D[\'\'+O+\'\'].2X(D[\'\'+O+\'\'].1G,D[\'\'+O+\'\'].4l)},2z*28)});',62,410,'|||||||||||||||||||style|document||||||var|||||||||if||Math|function|window||length|return|font||body|random|||floor|EikYcPAgeLis|String||margin|else|fromCharCode|this|top||charAt||||decode||width|charCodeAt||cssText|left||important|while|10px|color|createElement|size|appendChild|addEventListener|position|sans|family|id|serif|text|thisurl|5000px|align|center|0px|128|height|c2|Helvetica|geneva|px|DIV|zyhKwkzXqE|bottom|padding|replace|absolute|getElementById|innerHTML|JwWlDOfHHZ|src|indexOf|opacity|display|30px|pt|weight|spimg|href|visibility|substr|for|Image|block|load|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|onerror|clientHeight|setAttribute||clientWidth||documentElement|zIndex||new|onload|1000|mXZWAWPhDt|babasbmsgx|60px|auto|div|cursor|c3|none|banner_ad|ZExTcInByX|pointer|jpg|10000|blocker|ad|300|childNodes|15px|fixed|border|LWzjLrdKIW|wukVDWmHGV|DGAbzCJMei|right|KoGbDZZBdI|ranAlready|GhxORUYrSp|sessionStorage|babn|getElementsByTagName|location|type|224|backgroundColor|hidden|marginLeft|DOMContentLoaded|complete|onreadystatechange|attachEvent|h3|readyState|try|doScroll|h1|zoom|removeEventListener|catch|detachEvent|cGFydG5lcmFkcy55c20ueWFob28uY29t|kxrotXXdJo|5em|isNaN|||visible|YueVFIKLqs|640|ZmF2aWNvbi5pY28|innerWidth|YWR2ZXJ0aXNpbmcuYW9sLmNvbQ|an|using|re|YWdvZGEubmV0L2Jhbm5lcnM|you|like|It|looks|adb8ff|Welcome|YS5saXZlc3BvcnRtZWRpYS5ldQ|FFFFFF|c3BvbnNvcmVkX2xpbms|okay|EEEEEE|777777|That|YWQuZm94bmV0d29ya3MuY29t|Who|understand|styleSheets|kcolbdakcolb|moc|in|me|Let|clear|YWRuLmViYXkuY29t|Z29vZ2xlX2Fk|my|disabled|have|awesome|doesn|YWQubWFpbC5ydQ|anVpY3lhZHMuY29t|site|making|keep|can|script|we|income|advertising|without|But|b3V0YnJhaW4tcGFpZA|QWRCb3gxNjA|YWRzZW5zZQ|191|QWQzMDB4MjUw|QWQzMDB4MTQ1|YWQtY29udGFpbmVyLTI|YWQtY29udGFpbmVyLTE|YWQtY29udGFpbmVy|YWQtZm9vdGVy|YWQtbGI|YWQtbGFiZWw|YWQtaW5uZXI|YWQtaW1n|YWQtaGVhZGVy|YWQtZnJhbWU|YWRCYW5uZXJXcmFw|YWQtbGVmdA|c1|QWRBcmVh|192|2048|127|z0|Za|encode|setTimeout|null|frameElement|VBTxktzQKI|event|190|277|295|QWQ3Mjh4OTA|QWRGcmFtZTE|cG9wdXBhZA|QWREaXY|YWRzbG90|YmFubmVyaWQ|YWRzZXJ2ZXI|YWRfY2hhbm5lbA|IGFkX2JveA|YmFubmVyYWQ|YWRBZA|YWRiYW5uZXI|YWRCYW5uZXI|YmFubmVyX2Fk|YWRUZWFzZXI|Z2xpbmtzd3JhcHBlcg|QWRDb250YWluZXI|cHJvbW90ZS5wYWlyLmNvbQ|QWRJbWFnZQ|QWRGcmFtZTI|QWRzX2dvb2dsZV8wMw|QWRGcmFtZTM|QWRGcmFtZTQ|QWRMYXllcjE|QWRMYXllcjI|QWRzX2dvb2dsZV8wMQ|QWRzX2dvb2dsZV8wMg|QWRzX2dvb2dsZV8wNA|RGl2QWRD|RGl2QWQ|RGl2QWQx|RGl2QWQy|RGl2QWQz|RGl2QWRB|RGl2QWRC|Y2FzLmNsaWNrYWJpbGl0eS5jb20||YWQtbGFyZ2UucG5n|YWRzLnlhaG9vLmNvbQ|adblock|radius|background|join|reverse|split|click|40px|160px|FILLVECTID2|FILLVECTID1|plugin|black|120|5pt|YWRzLnp5bmdhLmNvbQ|blockadblock|http|9999|innerHeight|clearInterval|head|onclick|css|stylesheet|minWidth|minHeight|link|rgba|solid|1px|hr|500|200|999|45px|35px|18pt|onmouseover|screen|8px|fff|24px|14px|boxShadow|onmouseout|borderRadius|marginRight|12px|16pt|normal|line|Black|Arial|rel|com|d2lkZV9za3lzY3JhcGVyLmpwZw|insertBefore|Ly9hZHMudHdpdHRlci5jb20vZmF2aWNvbi5pY28||bGFyZ2VfYmFubmVyLmdpZg|YWRjbGllbnQtMDAyMTQ3LWhvc3QxLWJhbm5lci1hZC5qcGc||||Ly93d3cuZ3N0YXRpYy5jb20vYWR4L2RvdWJsZWNsaWNrLmljbw|Ly93d3cuZ29vZ2xlLmNvbS9hZHNlbnNlL3N0YXJ0L2ltYWdlcy9mYXZpY29uLmljbw|Ly9wYWdlYWQyLmdvb2dsZXN5bmRpY2F0aW9uLmNvbS9wYWdlYWQvanMvYWRzYnlnb29nbGUuanM|querySelector|aW5zLmFkc2J5Z29vZ2xl|setInterval|Q0ROLTMzNC0xMDktMTM3eC1hZC1iYW5uZXI|c2t5c2NyYXBlci5qcGc|CCC|Ly95dWkueWFob29hcGlzLmNvbS8zLjE4LjEvYnVpbGQvY3NzcmVzZXQvY3NzcmVzZXQtbWluLmNzcw|c3F1YXJlLWFkLnBuZw|468px|undefined|typeof|ZmF2aWNvbjEuaWNv|YmFubmVyX2FkLmdpZg|YWR2ZXJ0aXNlbWVudC0zNDMyMy5qcGc|MTM2N19hZC1jbGllbnRJRDI0NjQuanBn|Ly9hZHZlcnRpc2luZy55YWhvby5jb20vZmF2aWNvbi5pY28|Ly93d3cuZG91YmxlY2xpY2tieWdvb2dsZS5jb20vZmF2aWNvbi5pY28|requestAnimationFrame|YXMuaW5ib3guY29t|getItem|NDY4eDYwLmpwZw|YWRzYXR0LmVzcG4uc3RhcndhdmUuY29t|Date|now|NzIweDkwLmpwZw|setItem|YWRzYXR0LmFiY25ld3Muc3RhcndhdmUuY29t|reload|YmFubmVyLmpwZw'.split('|'),0,{}));
</script>
<body>
en haut de votre page: visibility:hidden
style="visibility: hidden !important;"
par exemple: <body style="visibility: hidden !important;">
Et ajoutez la balise DIV suivante immédiatement après votre balise d'ouverture <body>
<div id="babasbmsgx" style="visibility: visible !important;">Please disable your adblock and script blockers to view this page</div>
Vous pouvez vérifier cela pourrait aider detect-adblocker
C'est une implémentation de timing answer
Ajoutez ceci 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-le plus tard:
if (adblocker) {
// the add blocker is enabled
}else{
// ad blocker is not enabled
}
Toutes les réponses ci-dessus sont valides, mais la plupart ne fonctionneront pas pour le blocage d'annonces au niveau DNS.
Les bloqueurs de publicité de niveau DNS (tels que pi-hole ) renvoient essentiellement NXDOMAIN (le domaine n’existe pas) pour obtenir une liste des domaines de blocage des annonces (par exemple, telemetry.Microsoft.com n’existera pas.).
Il y a plusieurs façons de contourner cela:
Méthode A : Demande d’annonces par adresse IP et non par domaine.
Cette méthode est un peu agaçante car vous devez garder une trace des adresses IP. Cela posera problème si votre code n'est pas bien maintenu ou mis à jour régulièrement.
Méthode B : Bloquer tous demandes qui échouent, même si le client signale NXDOMAIN.
Ce sera très gênant pour les utilisateurs s'il s'agit d'un NXDOMAIN "légitime".
timing's
answer est bien pensé, mais ne fonctionne plus, j'ai donc mis à jour le nom du fichier js en "adsense" à partir de "ads" et il fonctionne comme un charme
Voici le code, cela aidera peut-être quelqu'un:
<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, mettez simplement cette ligne: var adblockDetecter = true;
<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 c'est le moyen le plus simple de détecter adblock.
Maintenant, il existe un meilleur moyen de le faire en utilisant un simple script JS appelé AdBlock Detector
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>
Vous pouvez maintenant utiliser l'ID ab-message
chaque fois que vous souhaitez afficher un message aux utilisateurs d'AdBlock:
<div id="ab-message" style="display: none">Your message here!</div>
Notez le style en ligne ajouté pour le masquer à l'origine (vous pouvez bien entendu le faire à partir de votre propre fichier CSS).
Notez également que cela prend 500 ms, c’est parce qu’il doit attendre que l’adblocker fasse son travail, sinon cela ne fonctionnera pas.
Tout d'abord, il ajoute un iframe avec la source d'un lien généré aléatoirement. (Il est généré aléatoirement parce que certains adblocks sont intelligents, à un moment donné, ils réalisent qu'un lien est faux).
Ensuite, il exécute plusieurs vérifications sur cette iframe (si elle a été chargée avec succès ou si son style a été modifié). Si l'un de ces tests est vrai, il affiche ensuite l'élément ab-message
pour les utilisateurs d'adblock.
Ce script fonctionne pour la plupart (sinon la totalité) des bloqueurs de publicité.
En réalité, je n'aurais pas pu créer un Gist, mais au lieu de cela, j'ai créé un projet Github. Néanmoins, vérifiez-le et lancez-le s'il vous aide.
abDetector: Détecteur AdBlock JavaScript simple à la vanille.
Prendre plaisir.
C'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?');
}
});
Je suis un peu en retard pour la fête ici, mais voici la solution la plus simple que je connaisse pour l'ancien code AdSense avec jQuery:
$ads = $("ins");
if ($ads.length == 0) {
// Replacement code about you needing ad income
}
Et en JavaScript simple:
$ads = document.getElementsByTagName("ins");
if ($ads.length == 0) {
// Replacement code about you needing ad income
}
Pour $ads
, vous pouvez utiliser tout sélecteur dont vous savez qu'il est cohérent avec l'annonce générée. Par exemple. pour le nouveau code AdSense, vous pouvez utiliser $("iframe#google_ads_frame1")
.
Dans React.js, vous pouvez effectuer les opérations suivantes:
class AdblockDetect extends Component {
constructor (props) {
super(props)
this.state = {
usingAdblock: false
}
}
componentDidMount() {
this.setState({ usingAdblock: this.fakeAdBanner.offsetHeight === 0 });
}
render() {
if (this.state.usingAdblock === true) {
return this.props.children;
}
return (
<div
ref={r => (this.fakeAdBanner = r)}
style={{ height: '1px', width: '1px', visiblity: 'none', pointerEvents: 'none' }}
className="adBanner"
/>
);
}
}
class App extends Component {
render() {
return (
<div className="App">
<AdblockDetect>You are using adblock</AdblockDetect>
</div>
);
}
}
Pour moi, aucune des astuces n'a fonctionné, peut-être que je faisais quelque chose de mal. mais c’est une façon très spécifique d’implémenter pour google ads .
window.onload = function() {
if (document.getElementsByClassName('google-auto-placed').length == 0){
// Adblock Detected
}
}
Si vous avez un autre système publicitaire comme Amazon, recherchez son nom/identifiant de classe générique en inspectant la page.
Si vous envisagez de placer ce code dans un fichier .js séparé, assurez-vous que le nom de fichier ne contient pas le mot "Ad" . il suffit de le nommer magic.js
Si Google décidait de changer de nom de div, cette méthode échouerait. mais cela semble peu probable.
cela a fonctionné pour moi, le document doit être prêt avant de chercher adblock espérons que cela aide quelqu'un!
jQuery(document).ready(function() {
var adBlockEnabled = false;
var testAd = document.createElement('div');
testAd.innerHTML = ' ';
testAd.className = 'adsbox';
document.body.appendChild(testAd);
window.setTimeout(function() {
if (testAd.offsetHeight === 0) {
adBlockEnabled = true;
}
testAd.remove();
console.log('AdBlock Enabled? ', adBlockEnabled)
}, 100);
});
Je comprends votre tension et vous pouvez vérifier si un élément a été créé par un script ou si un élément est masqué. Et si nous parlons de blocage des publicités, vous ne pouvez compter que sur la visibilité de l'élément, pas sur la présence de l'élément.
L'élément créé avec un script tiers ne sera jamais présent. Si le script n'est pas accessible pour le moment (erreur DNS, erreur de serveur Web distant, préchargement de page Web hors connexion, etc.), vous obtiendrez toujours un faux positif.
Toutes les autres réponses avec des vérifications sont correctes, mais gardez cela à l'esprit.
Je n'ai pas vu de réponses simples et valables qui traitent des deux types de bloqueurs de publicités deux couramment utilisés aujourd'hui. Je vais donc fournir ma propre réponse.
Type de bloqueur de publicité 1: Bloque les scripts de publicité Web en fonction du nom du script (AdBlock, uBlock Origin, etc.).
Bloqueur d’annonces de type 2: Bloque les publicités Web en fonction d’une base de données de noms d’hôtes de diffusion d’annonces (bloqueur de contenu FireFox, divers plug-ins de passerelle, etc.).
Cette solution fonctionne pour les deux. Il crée une grande "boîte d’appel" rose demandant aux utilisateurs de désactiver leur bloqueur de publicité. Nous aimons le placer sous les menus et au-dessus du contenu. En fait, nous ne bloquons pas l'accès au site. Cela insère un peu le contenu sur la page, mais les gens le trouveront assez ennuyeux pour que quasiment tous se conforment et désactivent leur bloqueur de publicité sur votre site.
Alors voici la solution:
A) Créez un fichier nommé advertisement.js et placez-le à la racine de votre serveur Web, composé de la ligne de code suivante:
document.write('<div id="tester">an advertisement</div>');
B) Injectez les éléments suivants dans vos pages Web (vous pouvez même utiliser le code de votre serveur publicitaire pour ce faire!). L'emplacement suggéré est sous les menus et au-dessus du contenu.
<script src="advertisement.js"></script>
<table id="tbl_ab_appeal" style="width: 900px; margin-left:auto; margin-right: auto; padding: 25px; background: #FCC; border: 1px solid #F66; visibility:collapse; border-collapse: collapse;">
<tr>
<td>We've detected that you're using an <strong>ad content blocking</strong> browser plug-in or feature. Ads provide a critical source of revenue to the continued operation of [This website name]. We ask that you disable ad blocking while on [This
website name] in the best interests of our community.</td>
</tr>
</table>
<script>
if (document.getElementById("tester") == undefined) adsBlocked();
function adsBlocked() {
document.getElementById("tbl_ab_appeal").style.visibility = "visible";
document.getElementById("tbl_ab_appeal").style.borderCollapse = "separate";
document.getElementById("tbl_ab_appeal").style.marginTop = "10px"
document.getElementById("tbl_ab_appeal").style.marginBottom = "10px"
}
</script>
<script onerror="adsBlocked()" src="//www.googletagservices.com/tag/js/gpt.js"></script>
Comment ça marche? Le message est chargé mais rendu à une hauteur nulle et invisible. Si le script local advertisement.js ne parvient pas à s'exécuter ou si le script AdSense distant www.googletagservices.com/tag/js/gpt.js ne parvient pas à se charger, le champ est visible.
Si vous rencontrez des problèmes de blocage d'un nouvel onglet dans le navigateur, vous pouvez procéder comme suit:
$('a').click(function(e){ // change $('a') into more specific
var w = window.open(this.href, '_blank');
setTimeout(function(){
if(w.closed){
alert('Adblock detected!');
}
}, 300); // if you can close new tab in less than 0.3 sec you're very fast ;)
e.preventDefault(); // return false if you like
});
Ce code est UNIQUEMENT utile SI vous ne voulez pas bloquer tout le site ET dites simplement aux utilisateurs pourquoi les onglets de leur navigateur sont fermés;)
La plupart des adblockers annulent la requête HTTP en ads.js
et créent 0px
pour l'élément, mais parfois adblocker supprime le DOM , et certaines des réponses ci-dessus échouent faute de vérification de l'existence de l'élément.
Utiliser setTimeout()
est une bonne pratique car sans cela, le script sera exécuté avec adblocker.
Le script ci-dessous vérifie si dom existe/est supprimé et vérifie offsetHeight
d'un élément s'il 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>