Gostaria de poder detectar se o usuário está usando um software de bloqueio de anúncios quando visitar meu site. Se eles estiverem usando, quero exibir uma mensagem pedindo para desativá-lo para dar suporte ao projeto, como este site faz.
Se você entrar nesse site e seu navegador tiver algum tipo de software de bloqueio de anúncios ativado, o site, em vez de mostrar os anúncios reais, exibirá uma pequena faixa informando aos usuários que a receita do anúncio é usada para hospedar o projeto e eles devem considerar desativar o Adblock .
Quero fazer isso no meu site, estou usando anúncios adsense, como posso fazer isso?
Respostas:
Minha solução não é específica para uma determinada rede de anunciantes e é muito leve. Venho produzindo isso há alguns anos. O AdBlock bloqueia todos os URLs que contêm a palavra "anúncios". Então foi isso que eu fiz:
Adicionei um pequeno arquivo js ao meu webroot com o nome
ads.js
Esta é a única linha de código nesse arquivo
Em algum lugar da minha página:
Arquivos como ads.js são bloqueados por pelo menos esses bloqueadores de anúncios no Chrome:
Atualizar em 2019-02-15:
Ghostery adicionado na lista acima, porque a extensão agora também bloqueia solicitações para ads.js. Muito conveniente. Isso significa que Ghostery está realmente nos ajudando os desenvolvedores a detectar o bloqueio de anúncios com sua extensão?
Não funciona com:
Texugo de privacidade
fonte
js/ads.js
por favor? como estou no blogger, tive que fazer o upload de.js
algum lugar (como: Google Drive) e o link nesse caso não contémads
. Seria realmente útil se você der o link do seu arquivo.Não é uma resposta direta, mas eu colocaria a mensagem por trás do anúncio a ser carregado ... em vez de tentar detectá-lo, seria exibido apenas quando o anúncio não fosse.
fonte
http://thepcspy.com/read/how_to_block_adblock/
Com jQuery:
Obviamente, você precisa ter uma página de destino para AdblockNotice.html, e a classe .myTestAd precisa refletir seus contêineres de anúncios reais. Mas isso deve funcionar.
EDITAR
Como TD_Nijboer recomenda, a melhor maneira é usar o seletor
:hidden
(ou:visible
, como eu uso abaixo), para quedisplay: none
também seja verificado:Obviamente, ambos podem ser combinados em um
if
bloco, se desejado.Observe que
visibility: hidden
também não será capturado (onde o espaço do layout fica, mas o anúncio não está visível). Para verificar isso, outro filtro pode ser usado:O que fornecerá uma variedade de elementos de anúncio que são "invisíveis" (sendo qualquer um maior do que
0
um problema, em teoria).fonte
Redirecting in this case is a bad idea. If your advertising service goes down, all visitors could be redirected to that page.
De fato. Sem mencionar que eles simplesmente juntariam um script simples para derrotar a contramedida. Além disso, você realmente acha que, sendo agressivo e forte, os usuários serão motivados a desativar seus bloqueadores de anúncios? Não, tudo o que faria seria irritá-los e azedá-los contra o seu site. A maioria dos sites prefere simplesmente exibir uma mensagem em vez de se tornar hostil.Sem pedidos extras. Nenhuma biblioteca externa. Simplesmente, JavaScript simples:
Crédito para o post de Christian Heilmann , acho que é de longe a melhor solução para detectar o AdBlock.
fonte
testAd.style.display = 'absolute'
-lo e movê-lo para fora da tela<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>
(claro que depois de testar css deve ser alterado para<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
é umposition
valor.window.onload
funçãoA maioria dos anúncios é carregada dinamicamente em javascript. Acabei de usar o evento onerror para detectar se o script do anúncio pode ser carregado ou não. Parece funcionar.
Exemplo com GoogleAds:
Isso também pode ser usado em outros elementos para verificar se um bloqueador de anúncios está bloqueando o conteúdo. Este método pode produzir falsos positivos se os elementos remotos não existirem ou não puderem ser alcançados.
fonte
offsetHeight
Para detectar se o usuário está bloqueando anúncios, tudo o que você precisa fazer é encontrar uma função no javascript do anúncio e tentar testá-la. Não importa qual método eles estão usando para bloquear o anúncio. Aqui está a aparência dos anúncios do Google Adsense:
Este método é descrito aqui: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam
fonte
typeof
é uma sobrecarga se você verificar a propriedade do objeto. Use simples=== undefined
.Minha solução mais fácil com o jquery é:
advertisement.js não contém nada. Quando alguém usa o adblock, ele falha e a função é chamada.
fonte
Sei que já existem respostas suficientes, mas como essa pergunta surge no Google, procurei "detectar adblock" no tópico, queria fornecer algumas dicas caso você não estivesse usando o adsense .
Especificamente, com este exemplo, você pode detectar se a lista de Adblock padrão fornecida pelo Firefox Adblock é usada. É vantajoso que nesta lista de bloqueio haja um elemento bloqueado com o ID do CSS
#bottomAd
. Se eu incluir esse elemento na página e testar sua altura, eu sei se o bloqueio de anúncios está ativo ou não:O resto é feito através do suspeito jQuery usual:
Como pode ser visto, estou usando
setTimeout
com pelo menos um tempo limite de 1ms. Eu testei isso em vários navegadores e na maioria das vezes, verificando diretamente o elementoready
sempre retornado 0; independentemente de o bloqueador de anúncios estar ativo ou não. Eu estava tendo duas idéias sobre isso: ou a renderização ainda não foi concluída ou o Adblock ainda não foi lançado. Não me preocupei em investigar mais.fonte
.is(":hidden")
verificação depende se a altura e a largura são zero. Se você acabou de definir a altura como 0, mas a div ainda ocupa uma largura, ela não é considerada "oculta" pelo jQuery. Portanto, se você pode dizer,.is(":hidden")
depende um pouco de como o bloqueador de anúncios decide redimensionar / ocultar o conteúdo.Meu conselho é: não faça isso!
Qualquer cenário em que você trate as pessoas como "malfeitores" resultará em uma revanche.
Aqui está a minha proposta.
Coloque uma pequena mensagem discreta no topo da página (independentemente de os anúncios estarem bloqueados) com o texto
I *totally* respect your right to block ads
e um link para outra página / pop-up intituladaRead more ...
.Na outra página, deixe claro que você entende que é o computador deles e que eles são livres para usar o bloqueio de anúncios.
Também deixe claro , de maneira não acusatória, que o uso desses bloqueadores dificulta a exibição de um ótimo conteúdo (explicando detalhadamente o motivo) e que, embora você prefira que o bloqueio de anúncios não ocorra no seu site, é totalmente a decisão deles. Concentre-se nos aspectos positivos de desativar o bloqueio.
Aqueles que se opõem veementemente a anúncios ignoram isso, mas você nunca teve a chance de convencê-los. Aqueles que são indiferentes podem muito bem ser influenciados pelo seu apelo, já que você não está fazendo o todo "deixe-me fazer o que eu quero ou vou pegar minha bola e vou para casa", coisa que honestamente deveria ser o domínio exclusivo de crianças de cinco anos.
Lembre-se, ninguém colocou uma arma na sua cabeça e forçou você a colocar suas coisas na rede. Trate seus leitores / usuários com respeito e provavelmente encontrará um bom número deles.
fonte
Eles estão utilizando o fato de que o código de anúncio do Google cria um iframe com o ID "iframe". Portanto, desde que você ainda não tenha algo em sua página com esse ID, isso funcionará para você também.
fonte
Basta adicionar um pequeno script ao seu site:
Com o nome adsbygoogle.js
Em seguida, faça o seguinte:
Encontrei esta solução aqui
fonte
Notei comentários anteriores usa o Google Adsense como objeto para testar. Algumas páginas não usam o adsense, e usar o bloco do adsense como teste não é realmente uma boa ideia. Porque o bloco do adsense pode prejudicar o seu SEO. Aqui está um exemplo de como eu detecto por classe bloqueada simples do adblocker:
Html:
Jquery:
"ablockercheck" é um ID que o bloqueador de anúncios bloqueia. Portanto, verificando se está visível, você pode detectar se o bloqueador de anúncios está ativado.
fonte
O AdBlock parece bloquear o carregamento de arquivos JavaScript do AdSense (etc). Portanto, se você estiver usando a versão assíncrona dos anúncios do AdSense, poderá verificar se
adsbygoogle
é umArray
. Isso deve ser verificado após alguns segundos, pois o script assíncrono é ... assíncrono. Aqui está um esboço :Para esclarecer, veja um exemplo de como é o código de anúncios assíncronos do AdSense:
Observe que
adsbygoogle
é inicializado como uma matriz. Aadsbygoogle.js
biblioteca altera essa matriz paraObject {push: ...}
quando é executada. A verificação do tipo de variável após um certo tempo pode dizer se o script foi carregado.fonte
Essa abordagem eu uso no meu site, talvez você ache útil. Na minha opinião, é a solução mais simples .
O AdBlocker bloqueia classes específicas e elementos html. Ao inspecionar esses seletores de anúncios bloqueados no console do desenvolvedor (todos listados), você pode ver quais elementos serão sempre bloqueados.
Por exemplo, basta inspecionar esta página de pergunta no stackoverflow e você verá vários anúncios bloqueados.
Por exemplo, qualquer elemento com
bottom-ad
classe é bloqueado automaticamente.bottom-ad
classe:<div class="bottom-ad" style="width: 1px; height: 1px;">HI</div>
$('.bottom-ad').css('display') == "none"
ou melhor ainda, usando$('.bottom-ad').is(':visible')
Se o valor for
true
, o AdBlocker estará ativo.fonte
Você não precisa de uma solicitação HTTP extra; basta calcular a altura de um complemento falso.
A propósito, aqui está uma lista completa dos elementos que os bloqueadores de anúncios evitam renderizar.
fonte
a maneira segura é envolver seus anúncios por dentro
<div>
e verificar a alturafunciona com adblock plus e firewall bluehell.
fonte
Uma maneira eficiente de verificar se há um bloco de anúncios: basta verificar se há um bloco de anúncios ativado, tentando acionar o URL dos anúncios do Google. Se sim, execute o callback_has_adblock; caso contrário, execute o callback_no_adblock. Esta solução custa mais um pedido, mas pelo menos funciona:
Esta solução funciona para todos os tipos de anúncios, não apenas para o Google Adsense.
fonte
Apesar da idade dessa pergunta, recentemente a achei muito útil e, portanto, só posso assumir que ainda há outras pessoas que a visualizam. Depois de procurar aqui e em outros lugares, supus que as três principais verificações do lado do cliente para detectar indiretamente um bloqueador de anúncios fossem verificar recursos bloqueados
div
/img
, bloqueadosiframe
e bloqueados (arquivos javascript).Talvez esteja exagerado ou paranóico, mas cobre sistemas de bloqueio de anúncios que bloqueiam apenas um ou dois da seleção e, portanto, podem não ter sido cobertos se você tivesse feito apenas uma verificação.
Na página em que você está executando as verificações, adicione: (Estou usando jQuery)
e adicione o seguinte em qualquer outro lugar da página:
Usei uma div com um nome de isca e uma imagem hospedada externamente com o texto "Advert" e nas dimensões usadas pelo AdSense (graças a placehold.it!).
Em
advertisement.js
você deve acrescentar algo ao documento que podemos verificar mais tarde. Embora pareça que você está fazendo o mesmo que antes, na verdade você está verificando se o próprio arquivo (advertisement.js
) está sendo carregado, não a saída.E então o script de detecção do bloqueador de anúncios que combina tudo
Quando o documento está pronto , ou seja, a marcação é carregada, adicionamos o iframe ao documento também. Então, quando a janela estiver carregada , ou seja, o conteúdo incl. imagens etc. é carregada, verificamos:
advertimsent.js
estivesse bloqueado.E os estilos:
Espero que isto ajude
fonte
Se você estiver usando o novo código do Google AdSense, poderá fazer uma verificação fácil, sem recorrer a verificações de conteúdo ou CSS.
Coloque seus anúncios normalmente na sua marcação:
Em seguida, você chama o código do adsense na parte inferior da sua página (note que não use a
"async"
sinalização ao chamar oadsbygoogle.js
script):Em seguida, adicione este pequeno trecho de código abaixo:
O AdSense sempre cria / define o sinalizador
adsbygoogle.loaded
paratrue
quando os anúncios são carregados. Você pode colocar a verificação em uma função setTimeout para atrasar a verificação por alguns segundos.fonte
A maioria dos adblocker cancela a solicitação HTTP para
ads.js
e faz0px
o elemento, mas em algum momento o adblocker removeu o DOM , e algumas respostas acima falharão porque não verificam a existência do elemento.Usar
setTimeout()
é uma boa prática, porque sem ela, o script será executado com o adblocker.O script abaixo verificará se o dom existe / foi removido e verificará
offsetHeight
um elemento, se existir.fonte
Todas as respostas acima são válidas, no entanto, a maioria não funcionará no bloqueio de anúncios no nível DNS.
Os bloqueadores de anúncios no nível do DNS (como pi-hole ) basicamente retornam NXDOMAIN (o domínio não existe) para uma lista de domínios de bloqueio de anúncios (por exemplo, telemetry.microsoft.com "não existe" quando existe).
Existem algumas maneiras de contornar isso:
Método A : solicitação de anúncios por endereço IP, não por domínio.
Este método é um pouco chato, pois você precisaria acompanhar os endereços IP. Isso será problemático se o seu código não for bem mantido ou atualizado regularmente.
Método B : Bloqueie todas as solicitações que falharem, mesmo que o cliente relate NXDOMAIN.
Isso será muito irritante para os usuários se for um NXDOMAIN "legítimo".
fonte
e no arquivo getbanner.cfm:
Eu acho que é a maneira mais fácil de detectar adblock.
fonte
true
sempre #Isto é o que funcionou para mim:
fonte
Sei que isso já foi respondido, mas examinei o site de amostra sugerido e vejo que eles fazem o seguinte:
fonte
Não há necessidade de timeouts e farejadores DOM. Simplesmente tente carregar um script de redes de anúncios populares e veja se o bloqueador de anúncios interceptou a solicitação HTTP.
fonte
Acabei de criar meu próprio "plugin" para resolver isso e funciona muito bem:
adBuddy + jsBuddy:
ADBuddy JSBuddy GitHub
Adicionei compatibilidade móvel e detecção de jsBlocking entre outras coisas ... (como uma sobreposição que é mostrada aos usuários pedindo para desativar o software adBlocking / jsBlocking ); Também fez responsivo amigável.
É de código aberto sob a licença Coffeeware .
fonte
Entendo sua tensão e você pode verificar se o elemento foi criado pelo script ou se o elemento está oculto. E se falamos de bloqueio de anúncios, você pode contar apenas com a visibilidade do elemento, não com a presença do elemento.
O elemento criado com script de terceiros nunca estará presente, se o script não estiver acessível no momento (erro de DNS, erro de servidor da Web remoto, pré-carregamento de página da Web offline etc.), e você sempre terá um falso positivo.
Todas as outras respostas com verificações estão corretas, mas lembre-se disso.
fonte
timing's
a resposta é boa, mas não funciona mais, por isso atualizei o nome do arquivo js para 'adsense' a partir de 'ads' e ele está funcionando como um encanto!Aqui está o código, talvez isso ajude alguém:
No arquivo Js, coloque apenas esta linha:
var adblockDetecter = true;
fonte
Agora, há uma maneira melhor de fazer isso usando um script JS simples chamado AdBlock Detector.
Veja como usá-lo:
Adicione isto à sua
<head>
seção:Agora você pode usar o
ab-message
ID sempre que desejar exibir uma mensagem para os usuários do AdBlock:Observe o estilo embutido adicionado para ocultá-lo originalmente (é claro, você também pode fazer isso no seu próprio arquivo CSS).
Observe também que são necessários 500 ms, é porque ele precisa aguardar o adblocker fazer o seu trabalho ou não funcionará.
Uma pequena explicação de como esse script funciona
Primeiro, ele anexa um iframe à fonte de um link gerado aleatoriamente. (É gerado aleatoriamente porque alguns adblocks são inteligentes, em algum momento, eles percebem que um link é falso).
Em seguida, ele executa várias verificações nesse iframe (se ele foi carregado com sucesso ou se seu estilo foi modificado). Se um desses testes for verdadeiro, ele exibirá o
ab-message
elemento para bloquear usuários.Esse script funciona para a maioria (se não todos) dos bloqueadores de anúncios.
EXTRA
Nenhum ponto, na verdade, poderia ter apenas criado uma essência, mas, em vez disso, criei um projeto no Github, mas mesmo assim, confira e dê uma olhada se ajudou.
abDetector: detector simples de JavaScript AdBlock com baunilha.
Aproveitar.
fonte
Você pode verificar isso, pode ajudar a detectar o adblocker
É uma implementação de resposta de tempo
Adicione isso antes de qualquer script na tag head:
Depois, use-o:
fonte
window.adblocker
no console do navegador se ele retornartrue
e o adblocker estiver ativado. Caso contrário, ele retornará.false
Você pode verificar a documentação completa detect-adblocker