Sobre o Projeto
O Bloqueador de Abas Indesejadas é uma extensão de navegador de alta performance, desenvolvida utilizando o Manifest V3. Sua principal missão é devolver o controle de navegação ao usuário, impedindo que scripts maliciosos, anúncios invasivos ou cliques acidentais abram novas abas (pop-ups/pop-unders) ou redirecionem a página atual sem o consentimento explícito.
A arquitetura foi pensada para oferecer uma segurança robusta e uma experiência limpa, substituindo completamente os alertas nativos e engessados do navegador por uma interface profissional e integrada.
🚀 Funcionalidades Principais
1. Interceptação Profunda de Pop-ups (window.open)
Scripts injetados por sites de terceiros frequentemente tentam abrir janelas em segundo plano usando a função window.open. A extensão neutraliza essa ação diretamente na raiz:
Injeta um script seguro antes que a página seja carregada (run_at: "document_start").
Sobrescreve o comportamento padrão do navegador, bloqueando a abertura silenciosa de abas.
Registra a tentativa e notifica o sistema visualmente.
2. Bloqueio Inteligente de Cliques Físicos e Programáticos
Não importa se o usuário clicou em um link disfarçado ou se um script tentou simular um clique (via .click()):
Links Externos na Mesma Aba: Se um link tentar tirar o usuário do domínio atual, a extensão pausa a navegação.
Remoção do target="_blank": Links projetados para forçar a abertura de uma nova aba têm esse atributo removido, mantendo a navegação contida na aba atual e sob análise.
3. Interface de Confirmação Profissional (UI/UX)
Para garantir uma experiência de usuário premium, a extensão elimina o uso de caixas de diálogo nativas do sistema (alert, confirm).
Modal Customizado: Quando um redirecionamento externo é detectado, a extensão renderiza um modal diretamente no DOM da página.
Foco Visual: O modal utiliza um fundo escurecido com desfoque (Blur), criando um isolamento visual elegante que foca a atenção do usuário na URL de destino.
Ação Assíncrona: A navegação só ocorre se o usuário clicar no botão "Continuar", sem travar a thread principal do navegador.
4. Controle Rápido e Persistência de Estado
O usuário tem total controle sobre a ferramenta através de um Popup de acesso rápido.
Liga/Desliga Instantâneo: Um botão com feedback visual claro (Verde para Ligado, Vermelho para Desligado).
Memória de Estado: Utiliza a API chrome.storage.local para lembrar a preferência do usuário. Se ele desligar o bloqueador, a extensão permanecerá inativa em todas as abas até ser reativada.
5. Notificações Visuais Discretas (Badge)
Sempre que um bloqueio ocorre no modo silencioso (como pop-ups invisíveis), a extensão não interrompe a leitura do usuário.
Exibe um "Badge" (selo) vermelho no ícone da extensão.
Mantém uma contagem independente de bloqueios para cada aba aberta.
A contagem é zerada automaticamente se o usuário recarregar a página ou fechar a aba.
📂 Estrutura e Arquitetura de Arquivos
Para facilitar manutenções futuras e atualizações do sistema, o código segue o princípio de responsabilidade única:
manifest.json: O "coração" da extensão. Define as permissões (storage), a versão da API (V3) e instrui o navegador sobre quais scripts devem rodar e onde.
popup.html & popup.js: A interface do usuário que aparece ao clicar no ícone da extensão. Controla visualmente o estado (Ligado/Desligado) e salva a preferência no armazenamento local.
background.js (Service Worker): Roda de forma independente em segundo plano. É o responsável por escutar as mensagens de bloqueio e atualizar o selo visual (Badge) no ícone da extensão de forma isolada para cada Tab ID.
content.js: O "guarda-costas" da página atual. É injetado em todas as URLs. Ele intercepta cliques físicos, gerencia a renderização do Modal Customizado de confirmação e faz a ponte de comunicação com o Service Worker.
inject.js: Um script "infiltrado" executado no contexto da página web (não no ambiente isolado da extensão). Isso permite que ele sobrescreva métodos nativos do JavaScript (como window.open e HTMLAnchorElement.prototype.click) antes que o código do site original possa agir, reportando as tentativas de volta ao content.js via Eventos Customizados.
🛠️ Casos de Uso Recomendados
Navegação Segura: Bloqueia pop-unders invisíveis em sites de download e streaming.
Ambientes Focados: Impede que os usuários saiam acidentalmente de sistemas fechados ou jogos web.
Proteção de Sessão: Exige que o usuário verifique ativamente a URL de destino antes de ser ejetado do domínio atual.