Je voudrais pouvoir détecter si l'utilisateur utilise un logiciel de blocage publicitaire lors de sa visite sur mon site Web. S'ils l'utilisent, je veux afficher un message leur demandant de le désactiver afin de soutenir le projet, comme le fait ce site Web .
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 héberger le 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 faire cela?
Réponses:
Ma solution n'est pas spécifique à un certain réseau publicitaire et est très légère. Je l'ai en production depuis quelques années. AdBlock bloque toutes les URL contenant le mot "annonces". Voici donc ce que j'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
Puis quelque part dans ma page:
Des fichiers comme ads.js sont bloqués par au moins ces adblockers sur Chrome:
Mise à jour du 2019-02-15:
Ajout de Ghostery dans la liste ci-dessus car l'extension bloque désormais également les demandes à ads.js. Très utile. Est-ce à dire que Ghostery nous aide en fait à nous, les développeurs, à détecter le blocage des publicités avec leur extension?
Ne fonctionne pas avec:
Blaireau de confidentialité
la source
js/ads.js
s'il vous plaît? comme je suis dans blogueur, j'ai dû télécharger.js
quelque part (comme: Google Drive) et le lien dans ce cas ne contient pasads
. Il serait vraiment utile de donner le lien de votre fichier.Pas une réponse directe, mais je mettrais le message derrière l'annonce à charger ... plutôt qu'en essayant de le détecter, cela s'afficherait quand l'annonce ne le fait pas.
la source
http://thepcspy.com/read/how_to_block_adblock/
Avec jQuery:
Bien sûr, vous devez disposer d'une page de destination pour AdblockNotice.html, et la classe .myTestAd doit refléter vos conteneurs d'annonces réels. Mais cela devrait fonctionner.
ÉDITER
Comme le recommande TD_Nijboer, une meilleure façon est d'utiliser le sélecteur
:hidden
(ou:visible
, comme je l'utilise ci-dessous) pour que celadisplay: none
soit également vérifié:Bien sûr, les deux peuvent être combinés en un seul
if
bloc si vous le souhaitez.Notez que
visibility: hidden
cela ne sera pas capturé non plus (où l'espace de mise en page reste, mais l'annonce n'est pas visible). Pour vérifier cela, un autre filtre peut être utilisé:Ce qui vous donnera un tableau d'éléments publicitaires qui sont "invisibles" (tout étant supérieur à
0
un problème, en théorie).la source
Redirecting in this case is a bad idea. If your advertising service goes down, all visitors could be redirected to that page.
En effet. Sans compter qu'ils jetteraient simplement ensemble un script simple pour vaincre la contre-mesure. En outre, pensez-vous vraiment qu'en étant agressifs et puissants, les utilisateurs seront motivés à désactiver leurs bloqueurs de publicités? Non, tout ce qu'il accomplirait serait de les énerver et de les aigrir contre votre site. La plupart des sites choisissent simplement d'afficher un message plutôt que d'être hostiles.Pas de demandes supplémentaires. Pas de bibliothèques externes. JavaScript simple et simple:
Grâce à la publication de Christian Heilmann , je pense que c'est de loin la meilleure solution pour détecter AdBlock.
la source
testAd.style.display = 'absolute'
et le déplacer hors de l'écran<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="background-color:red;height:300px;width:300px;position: absolute;left:0;top:0;"> </div>
<div id="detect" class="ads ad adsbox doubleclick ad-placement carbon-ads" style="height:1px;width:1px;position: absolute;left:-999px;top:-999px;"> </div>
absolute
c'est uneposition
valeur.window.onload
fonctionLa plupart des annonces sont chargées dynamiquement en javascript. Je viens d'utiliser l'événement onerror pour détecter si le script publicitaire pouvait être chargé ou non. Semble fonctionner.
Exemple avec GoogleAds:
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.
la source
offsetHeight
Pour détecter si l'utilisateur bloque les publicités, tout ce que vous avez à faire est de trouver une fonction dans l'annonce javascript 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:
Cette méthode est décrite ici: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam
la source
typeof
est une surcharge si vous vérifiez la propriété de l'objet. Utilisez simple=== undefined
.Ma solution la plus simple avec jquery est:
advertisement.js ne contient rien. Lorsque quelqu'un utilise adblock, il échoue et la fonction est appelée.
la source
Je sais qu'il y a déjà suffisamment de réponses, mais comme cette question se pose sur Google, recherchez "détecter adblock" sur le sujet, je voulais fournir un aperçu au cas où vous 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 profite que dans cette liste de blocage il y a un élément bloqué avec l'ID CSS
#bottomAd
. Si j'inclus un tel élément dans la page et teste sa hauteur, je sais si le blocage publicitaire est actif ou non:Le reste se fait via le suspect jQuery habituel:
Comme on peut le voir, 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, vérifiant directement l'élément enready
retournant toujours 0; que l'adblocker soit actif ou non. J'avais deux idées à ce sujet: soit le rendu n'était pas encore fait, soit Adblock n'avait pas encore démarré. Je n'ai pas pris la peine d'enquêter davantage.la source
.is(":hidden")
vérification dépend de la hauteur et de la largeur de zéro. Si vous définissez simplement la hauteur à 0, mais que le div occupe toujours une largeur, il n'est pas considéré comme "masqué" par jQuery. Donc, si vous pouvez dire, cela.is(":hidden")
dépend quelque peu de la façon dont l'adblocker décide de redimensionner / masquer le contenu.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.
Mettez un petit message discret en haut de la page (que les publicités 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éeRead 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.
Assurez - vous aussi clairement 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, si vous préférez l'annonce de blocage de ne pas se produire 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 chance de les convaincre de toute façon. Ceux qui sont indifférents pourraient bien être influencés par votre appel, car vous ne faites pas tout ce que je veux, ou je vais prendre ma balle et rentrer à la maison, ce qui devrait être le domaine exclusif des enfants de cinq ans.
N'oubliez pas que personne ne vous a tenu un pistolet sur la tête et vous a forcé à mettre vos affaires sur le net. Traitez votre lectorat / utilisateurs avec respect et vous constaterez probablement qu'un bon nombre d'entre eux vous rendront la pareille.
la source
Ils utilisent le fait que le code d'annonce de Google crée un iframe avec l'id "iframe". Donc, tant que vous n'avez pas déjà quelque chose sur votre page avec cet ID, cela fonctionnera aussi pour vous.
la source
Ajoutez simplement un petit script sur votre site:
Avec le nom adsbygoogle.js
Ensuite, procédez comme suit:
Trouvé cette solution ici
la source
J'ai remarqué que les commentaires précédents utilisent google adsense comme objet à tester. Certaines pages n'utilisent pas adsense, et l'utilisation du bloc adsense comme test n'est pas vraiment une bonne idée. Parce que le bloc adsense peut nuire à votre référencement. Voici un exemple de détection de classe bloquée simple par adblocker:
Html:
Jquery:
"ablockercheck" est un identifiant qui bloque adblocker. Donc, en vérifiant s'il est visible, vous pouvez détecter si adblocker est activé.
la source
AdBlock semble bloquer le chargement des fichiers JavaScript AdSense (etc). Donc, si vous utilisez une version asynchrone des annonces AdSense, vous pouvez vérifier s'il
adsbygoogle
s'agit d'unArray
. Cela doit être vérifié après quelques secondes car le script asynchrone est ... asynchrone. Voici un aperçu :Pour clarifier, voici un exemple de ce à quoi ressemble le code des annonces asynchrones AdSense:
Notez qu'il
adsbygoogle
est initialisé en tant que tableau. Laadsbygoogle.js
bibliothèque change ce tableau enObject {push: ...}
lors de son exécution. La vérification du type de variable après un certain temps peut vous dire si le script a été chargé.la source
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 spécifiques et des éléments html, en inspectant ces sélecteurs de toutes les annonces bloquées dans la console du développeur (ils sont tous répertoriés), vous pouvez voir quels éléments seront toujours bloqués.
Par exemple, inspectez simplement cette page de questions sur stackoverflow et vous verrez un tas d'annonces bloquées.
Par exemple, tout élément avec
bottom-ad
classe est automatiquement bloqué.bottom-ad
classe:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
$('.bottom-ad').css('display') == "none"
ou encore mieux en utilisant$('.bottom-ad').is(':visible')
Si la valeur est
true
, AdBlocker est actif.la source
Vous n'avez pas besoin d'une demande HTTP supplémentaire, vous pouvez simplement calculer la hauteur d'un faux ajout.
À propos, voici une liste complète correspondant aux éléments que les adblockers évitent de rendre.
la source
le moyen le plus sûr est d'envelopper vos annonces à l'intérieur
<div>
et de vérifier la hauteurcela fonctionne avec adblock plus et le pare-feu bluehell.
la source
Un moyen efficace de vérifier s'il y a un bloc publicitaire: vérifiez simplement s'il y a un bloc publicitaire activé en essayant de déclencher l'URL des annonces Google. Si oui, exécutez callback_has_adblock, sinon, exécutez callback_no_adblock. Cette solution coûte une demande de plus mais au moins elle fonctionne:
Cette solution fonctionne pour toutes sortes d'annonces, pas seulement pour google adsense.
la source
Malgré l'âge de cette question, je l'ai récemment trouvée très utile et ne peux donc que supposer qu'il y en a d'autres encore. Après avoir regardé ici et ailleurs, j'ai supposé que les trois principales vérifications côté client pour détecter indirectement un bloqueur de publicités étaient de vérifier les
div
/img
bloqués, lesiframe
s bloqués et les ressources bloquées (fichiers javascript).C'est peut-être exagéré ou paranoïaque, mais cela couvre les systèmes de blocage des publicités qui ne bloquent qu'un ou deux de la sélection et peuvent donc ne pas avoir été couverts si vous n'aviez effectué qu'une seule vérification.
Sur la page où vous exécutez les vérifications, ajoutez: (J'utilise jQuery)
et ajoutez les éléments suivants ailleurs sur la page:
J'ai utilisé un 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 (merci à placehold.it!).
En
advertisement.js
vous devriez ajouter quelque chose au document que nous pouvons vérifier plus tard. Bien qu'il semble que vous fassiez la même chose qu'avant, vous vérifiez en fait le fichier (advertisement.js
) lui-même en cours de chargement, pas la sortie.Et puis le script de détection du bloqueur de publicité qui combine tout
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
n'était pas bloqué.Et les styles:
J'espère que cela t'aides
la source
Si vous utilisez le nouveau code AdSense, vous pouvez effectuer une vérification facile, sans recourir à des vérifications de contenu ou CSS.
Placez vos annonces comme d'habitude dans votre balisage:
Ensuite, vous appelez le code adsense en bas de votre page (notez que vous n'utilisez pas le
"async"
drapeau lors de l'appel duadsbygoogle.js
script):Ajoutez ensuite ce petit extrait de code ci-dessous:
AdSense crée / définit toujours le drapeau
adsbygoogle.loaded
àtrue
quand les annonces sont chargées, vous pouvez placer le contrôle dans une fonction setTimeout pour retarder la vérification de quelques secondes.la source
La plupart des adblocker annulent la requête HTTP vers l'élément
ads.js
et le font0px
, mais adblocker a parfois supprimé le DOM , et certaines réponses ci-dessus échouent car elles ne vérifient pas l'existence de l'élément.L'utilisation
setTimeout()
est une bonne pratique car sans elle, le script fera la course avec adblocker.Le script ci-dessous vérifiera si dom existe / a été supprimé et vérifie
offsetHeight
si un élément existe.la source
Toutes les réponses ci-dessus sont valides, mais la plupart ne fonctionneront pas pour le blocage des publicités au niveau DNS.
Bloqueurs de publicités au niveau DNS (comme pi-hole ) renvoient essentiellement NXDOMAIN (le domaine n'existe pas) pour une liste des domaines de blocage des publicités (par exemple, telemetry.microsoft.com "n'existera pas" quand il le fera).
Il existe 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 gênante car il faudrait garder une trace des adresses IP. Cela sera problématique si votre code n'est pas bien entretenu ou mis à jour régulièrement.
Méthode B : bloquez toutes les demandes qui échouent, même si le client signale NXDOMAIN.
Ce sera très ennuyeux pour les utilisateurs s'il s'agit d'un NXDOMAIN "légitime".
la source
et dans le fichier getbanner.cfm:
Je pense que c'est le moyen le plus simple de détecter un bloc publicitaire.
la source
true
toujoursC'est ce qui a fonctionné pour moi:
la source
Je sais que c'est déjà répondu, mais j'ai regardé l'exemple de site suggéré, et je vois qu'ils le font comme ceci:
la source
Pas besoin de délais d'attente et de reniflement DOM. Essayez simplement de charger un script à partir de réseaux publicitaires populaires et voyez si le bloqueur de publicité a intercepté la demande HTTP.
la source
Je viens de créer mon propre "plugin" pour résoudre ce problème et cela fonctionne très bien:
adBuddy + jsBuddy:
ADBuddy JSBuddy GitHub
J'ai ajouté la compatibilité mobile et la détection de jsBlocking entre autres ... (Comme une superposition qui est montrée aux utilisateurs leur demandant de désactiver l' adBlocking / jsBlocking logiciel ); Le rend également réactif et convivial.
Il est sous- traité sous la licence Coffeeware .
la source
Je comprends votre tension et vous pouvez vérifier si l'élément a été créé par le script ou si l'é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 ligne, etc.), et vous obtiendrez toujours un faux positif.
Toutes les autres réponses avec vérifications sont correctes, mais gardez cela à l'esprit.
la source
timing's
la réponse est bien pensée mais ne fonctionne plus, j'ai donc mis à jour le nom du fichier js en "adsense" de "ads" et cela fonctionne comme un charme!Voici le code, peut-être que cela aidera quelqu'un:
Dans le fichier Js mettez juste cette ligne:
var adblockDetecter = true;
la source
Maintenant, il y a une meilleure façon de le faire en utilisant un simple script JS appelé AdBlock Detector
Voici comment l'utiliser:
Ajoutez ceci à votre
<head>
section:Vous pouvez maintenant utiliser l'
ab-message
ID où vous voulez afficher un message aux utilisateurs AdBlock:Notez le style en ligne ajouté pour le masquer à l'origine (bien sûr, vous pouvez également 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 ou cela ne fonctionnera pas.
Une petite explication du fonctionnement de ce script
Tout d'abord, il ajoute un iframe avec une source de lien généré aléatoirement. (Il est généré de manière aléatoire car certains blocs publicitaires 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 alors l'
ab-message
élément pour bloquer les utilisateurs.Ce script fonctionne pour la plupart (sinon la totalité) des bloqueurs de publicités.
SUPPLÉMENTAIRE
Aucun point, vraiment, n'aurait pu créer un résumé, mais à la place, j'ai créé un projet Github, mais quand même, vérifiez-le et lancez-le si cela vous a aidé.
abDetector: Détecteur AdBlock JavaScript simple vanille.
Prendre plaisir.
la source
Vous pouvez vérifier cela, cela pourrait aider à détecter-adblocker
C'est une implémentation de réponse temporelle
Ajoutez ceci avant n'importe quel script dans la balise head:
Ensuite, utilisez-le plus tard:
la source
window.adblocker
dans la console de votre navigateur si elle retournetrue
alors adblocker est activé sinon il reviendrafalse
vous pouvez vérifier la documentation complète detect-adblocker