Manual do Ad-Clean Agent
Versão 1.0 · Chrome / Edge / Brave (Manifest V3, Chrome 111+)
Sumário
- Instalação
- A interface
- Como o bloqueio funciona
- O módulo do YouTube
- Agente heurístico
- Listas de filtro
- Regras próprias e o seletor de elemento
- Licença Pro
- Privacidade
- Quando algum site quebra
- Reportar um anúncio que passou
- Perguntas técnicas
1. Instalação
Pela Chrome Web Store
Em breve. Assinantes Pro recebem o pacote e o passo a passo por e-mail junto com a chave.
Carregando sem compactação (desenvolvedor / assinante Pro)
- Descompacte o pacote em uma pasta que você não vá apagar.
- Abra
chrome://extensions. - Ligue Modo do desenvolvedor (canto superior direito).
- Clique em Carregar sem compactação e escolha a pasta.
- Fixe o ícone na barra pelo menu de extensões (o alfinete).
O Chrome mostra um aviso sobre extensões em modo desenvolvedor a cada início. É comportamento do navegador para qualquer extensão fora da loja.
2. A interface
Popup (clique no ícone)
| Item | O que faz |
|---|---|
| Chave no topo | Liga e desliga a extensão inteira |
Etiqueta free / pro |
Plano ativo neste dispositivo |
| Domínio + "Permitir anúncios neste site" | Whitelist: pausa a extensão no site e recarrega a aba |
| Três contadores | Bloqueios nesta aba · total acumulado · tratados no YouTube |
| Remover elementos na página | Camada cosmética (CSS + remoção no DOM) |
| Bloquear trackers e pixels | Ruleset de analytics, pixels e redirecionadores de afiliado |
Anúncios de vídeo (YouTube) Pro |
Módulo de vídeo |
Agente heurístico Pro |
Detecção por pontuação, sem lista |
| Bloquear um elemento… | Seletor manual (veja a seção 7) |
| Reportar anúncio não bloqueado | Abre o formulário já preenchido com o site e a versão |
Página de opções (Regras e listas)
Licença, whitelist completa, regras próprias em sintaxe Adblock, assinaturas de listas, estatísticas e exportar/importar configuração.
Badge do ícone
O número no ícone é a contagem daquela aba, zerada a cada navegação.
3. Como o bloqueio funciona
Quatro camadas, nessa ordem:
1. Rede (declarativeNetRequest) — o navegador nem chega a pedir o recurso.
Dois rulesets embutidos: ads (redes de anúncio, incluindo chinesas e de
marketplace) e trackers (analytics, pixels, afiliados), este último desligável.
2. CSS antecipado — no primeiro instante do carregamento, antes de a página
pintar, um bloco de regras display:none é injetado. Nada de "flash" de anúncio.
3. Remoção no DOM — o que a lista não cobre, a varredura em JavaScript remove,
e o container que ficou vazio é colapsado (com trava para nunca apagar body,
main, article ou qualquer bloco que ainda tenha conteúdo visível).
4. MutationObserver — anúncio injetado depois do carregamento passa pelas mesmas camadas. Há ainda uma varredura de segurança a cada 4 segundos para páginas que reescrevem estilo fora de mutações observáveis.
Overlays e pop-ups têm tratamento próprio: elementos fixos com z-index alto que
cobrem a tela e se identificam como anúncio são removidos, e a trava de rolagem
que eles deixam no body é desfeita.
4. O módulo do YouTube
O YouTube não entrega o anúncio de vídeo por um domínio separado — ele vem descrito dentro do JSON do player. Bloquear por rede não resolve. O módulo age em duas frentes:
Antes do player ler (contexto da página)
Interceptamos JSON.parse, window.fetch nas rotas /youtubei/v1/player,
/next, /browse, /search, e as variáveis ytInitialPlayerResponse e
ytInitialData. De cada resposta são removidos adPlacements, playerAds,
adSlots e os renderers de anúncio de feed. O pré-roll não chega a existir.
O que escapa e chega à tela
| Situação | O que o módulo faz |
|---|---|
| Botão "Pular anúncio" | Clica assim que ele aparece |
| Anúncio não pulável | Muta, acelera para 16× e salta para o fim |
| Fim do anúncio | Restaura volume e velocidade originais |
| Overlay/banner sobre o vídeo | Remove |
| Slot no feed, busca e barra lateral | Esconde por CSS e limpa do JSON |
| Diálogo "bloqueadores não são permitidos" | Dispensa e retoma a reprodução |
Seletores mudam. O YouTube altera nomes de classe com frequência. A camada de JSON é estável; a de DOM é a que envelhece. Se algum anúncio começar a aparecer, reporte — a correção sai rápido.
5. Agente heurístico (Pro)
Lista de filtro só pega o que alguém já catalogou. Sites regionais, lojas e portais asiáticos ficam meses de fora. O agente decide sozinho, por pontuação:
| Sinal | Peso |
|---|---|
| Tamanho exatamente igual a um formato IAB (300×250, 728×90, 160×600…) | +3 |
iframe de rede de anúncio conhecida |
+4 |
iframe de terceiro (domínio diferente do site) |
+2 |
| Rótulo curto de publicidade — 14 idiomas, incluindo 广告, 推广, Anzeige, Publicidade | +3 |
| Link apontando para rede de anúncio | +3 |
Marcação de ad slot (data-ad-slot, data-adunit, ins…) |
+3 |
| Fixo na viewport (só soma se já houver outro sinal) | +1 |
| Muito texto ou vários parágrafos/formulários dentro | −2 a −3 |
Bloqueia a partir de 4 pontos — nenhum sinal isolado chega lá, sempre exige combinação. Embeds legítimos (YouTube, Vimeo, Maps, Spotify, reCAPTCHA, Stripe, PayPal, Disqus…) são imunes por lista fixa.
6. Listas de filtro
Em Regras e listas → Assinaturas, cole a URL de qualquer lista no formato
Adblock. A extensão baixa, converte as regras de rede para
declarativeNetRequest e aplica os seletores cosméticos na página. Atualização
automática a cada 12 horas.
Sugestões já embutidas na página de opções:
- EasyList — anúncios em geral
- EasyPrivacy — trackers
- EasyList Portuguese — sites em português
- Fanboy's Annoyance — pop-ups, banners de cookie
Para listas chinesas, EasyList China e a lista do AdGuard para chinês funcionam do mesmo jeito.
Limites do Chrome (não são nossos): 30.000 regras por ruleset estático e
5.000 regras dinâmicas no total — usamos teto de 4.000 para assinaturas. Regras
que o formato não expressa (regex, $csp, $removeparam, scriptlets, cosméticos
estendidos) são descartadas na conversão; na EasyList real isso é cerca de 4% das
linhas.
O plano gratuito permite 1 assinatura; o Pro, ilimitadas.
7. Regras próprias e o seletor de elemento
Pelo mouse
Popup → Bloquear um elemento… → passe o mouse (a área fica destacada em
vermelho) → clique. Esc cancela. A regra é salva para aquele domínio e
reaplicada nas próximas visitas.
Escrevendo
Em Regras e listas → Regras personalizadas, uma por linha, sintaxe Adblock:
exemplo.com##.banner-lateral → só nesse site (e subdomínios)
##.pop-up-newsletter → em todos os sites
Seletor inválido é recusado na hora de salvar, com a mensagem do erro. Gratuito: 10 regras. Pro: ilimitadas.
8. Licença Pro
Ativar
Regras e listas → Licença → cole a chave (XXXX-XXXX-XXXX-XXXX) → Ativar.
Trocar de máquina
Cada licença vale para 3 dispositivos. Para liberar uma vaga, clique em Desativar neste dispositivo antes de sair da máquina antiga. Perdeu o acesso ao aparelho? Peça a liberação pelo suporte.
Sem internet
A licença é revalidada uma vez por dia. Offline, o Pro continua funcionando por 14 dias antes de voltar ao plano gratuito.
Vencimento
Nada é desinstalado e nenhuma regra sua é apagada — a extensão só volta ao comportamento do plano gratuito.
9. Privacidade
A extensão nunca envia URL, título de página, histórico, formulários ou conteúdo de página. Nada.
O que a estatística anônima envia (e dá para desligar em Regras e listas):
| Campo | Exemplo | Para quê |
|---|---|---|
| Identificador aleatório | 9f3c… gerado no seu dispositivo |
Não contar a mesma instalação duas vezes |
| Versão | 1.0.0 |
Saber quem já atualizou |
| Idioma da interface | pt-BR |
Priorizar listas regionais |
| Sistema | mac |
Suporte |
| Plano | free / pro |
Métrica de conversão |
Detalhes na política de privacidade.
10. Quando algum site quebra
Na ordem, do mais simples ao mais específico:
- Whitelist o site no popup — resolve na hora, pausa tudo naquele domínio.
- Desligue "Bloquear trackers e pixels" — a causa mais comum. Sites que carregam conteúdo pelo Google Tag Manager, ou lojas cujo botão de compra passa por um redirecionador de afiliado, dependem desses domínios.
- Desligue "Remover elementos na página" — se o layout ficou estranho mas o conteúdo está lá, o problema é cosmético.
- Desligue o agente heurístico — se sumiu algum bloco que era conteúdo real.
- Reporte. Com o site e o que sumiu, viramos isso em exceção para todo mundo.
Player de vídeo que não inicia em site de notícia costuma ser o bloqueio do
imasdk.googleapis.com. Whitelist o site ou avise no reporte.
11. Reportar um anúncio que passou
Pelo popup, o botão Reportar anúncio não bloqueado já abre o formulário preenchido com o site e a versão. Ou direto:
O que faz um bom reporte: a URL exata, uma captura de tela com o anúncio destacado e, se souber, o seletor do elemento.
12. Perguntas técnicas
Por que o contador de bloqueios de rede fica em zero?
A API que reporta bloqueios (onRuleMatchedDebug) só existe em extensão carregada
sem compactação. Instalada pela loja, o Chrome não expõe esse dado — o contador
passa a mostrar apenas o que é removido na página. É limitação do navegador.
Por que preciso recarregar a página ao mudar uma chave? As camadas de rede e o CSS antecipado agem no início do carregamento. Sem recarregar, a mudança só vale para o próximo request. O popup recarrega sozinho.
Ele funciona dentro de iframes? Sim, os content scripts rodam em todos os frames.
Consome muita memória?
As listas grandes ficam no motor de CSS do navegador (barato); o JavaScript só
varre um conjunto pequeno de seletores. A varredura de overlay olha apenas filhos
diretos do body e diálogos, em vez de percorrer a página inteira.
Firefox? Ainda não. O modelo de extensão é outro; um port é plano futuro.