您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tenta esconder o banner anti-adblock (Google Funding Choices) do globo.com e restaurar scroll.
// ==UserScript== // @name Globo.com - Anti-Adblock Bypass // @namespace http://tampermonkey.net/ // @version 0.3 // @description Tenta esconder o banner anti-adblock (Google Funding Choices) do globo.com e restaurar scroll. // @author Seu Nome Aqui // @match *://*.globo.com/* // @match *://globo.com/* // @grant GM_addStyle // @grant none // @run-at document-start // ==/UserScript== (function() { 'use strict'; console.log('Tentando bloquear anti-adblock Globo (Funding Choices)...'); // --- Seletores específicos para o Google Funding Choices encontrados --- const selectorsToHide = [ '.fc-ab-root', // Contêiner principal do Funding Choices '.fc-dialog-overlay', // Sobreposição que bloqueia a página '.fc-ab-dialog', // A caixa de diálogo em si // '.fc-dialog-container' // Descomente se os acima não forem suficientes ]; // --- CSS para esconder os elementos --- // Usamos !important para tentar sobrescrever estilos do site. let css = selectorsToHide.join(',\n') + ' {\n'; css += ' display: none !important;\n'; css += ' visibility: hidden !important;\n'; css += ' z-index: -9999 !important; \n'; // Tenta jogar para trás css += ' position: absolute !important;\n'; // Tira do fluxo normal css += ' top: -9999px !important;\n'; // Move para fora da tela css += ' left: -9999px !important;\n'; css += '}\n'; // --- CSS para garantir que a rolagem da página funcione --- // O banner geralmente adiciona 'overflow: hidden' ao body ou html. css += 'body, html {\n'; css += ' overflow: auto !important;\n'; css += ' height: auto !important;\n'; // Garante altura automática // Adiciona remoção de possível classe de bloqueio (comum no Funding Choices) // css += ' position: static !important;\n'; // Pode ser necessário em alguns casos css += '}\n'; // Injeta o CSS na página o mais cedo possível GM_addStyle(css); console.log('CSS anti-adblock (Funding Choices) injetado.'); // --- Abordagem Adicional: Remover elementos via JS --- // Útil se esconder via CSS não for suficiente ou se o site os reativar. function removeAnnoyingElements() { let removed = false; selectorsToHide.forEach(selector => { try { const elements = document.querySelectorAll(selector); elements.forEach(el => { if (el && typeof el.remove === 'function') { console.log('Removendo elemento:', el); el.remove(); removed = true; } else if (el) { // Fallback se .remove() não existir (muito improvável) el.style.display = 'none'; el.style.visibility = 'hidden'; } }); } catch (e) { console.error('Erro ao tentar remover seletor:', selector, e); } }); // Tenta reativar o scroll novamente via JS, caso CSS não funcione // e remove classes comuns que bloqueiam scroll try { document.body.style.overflow = 'auto'; document.documentElement.style.overflow = 'auto'; document.body.style.position = 'static'; // Tenta resetar posição document.documentElement.style.position = 'static'; // Remove classes comuns de bloqueio (ajuste se necessário) document.body.classList.remove('fc-ab-locked'); document.documentElement.classList.remove('fc-ab-locked'); } catch (e) { console.error('Erro ao tentar reativar scroll/remover classes via JS:', e); } if (removed) { console.log('Elementos anti-adblock removidos via JS.'); } return removed; } // Tenta remover após um pequeno atraso e depois periodicamente por um tempo // (caso o banner apareça depois do carregamento inicial) setTimeout(removeAnnoyingElements, 500); // 0.5 segundos setTimeout(removeAnnoyingElements, 1500); // 1.5 segundos setTimeout(removeAnnoyingElements, 3000); // 3 segundos // Observador de Mutações (alternativa mais avançada e eficiente que setInterval) // Observa se os elementos são adicionados ao DOM depois const observer = new MutationObserver((mutationsList, observer) => { for(const mutation of mutationsList) { if (mutation.type === 'childList') { if (removeAnnoyingElements()) { // Se removemos algo, podemos parar de observar por um tempo // ou até mesmo desconectar se o problema for resolvido. // console.log('Elemento detectado e removido pelo MutationObserver.'); // observer.disconnect(); // Descomente se quiser parar após a primeira detecção/remoção } } } }); // Inicia a observação no body, procurando por adições de nós filhos observer.observe(document.body || document.documentElement, { childList: true, subtree: true }); console.log('MutationObserver iniciado para detectar adições tardias do banner.'); // Para o observador após um tempo para não rodar indefinidamente (opcional) // setTimeout(() => { // observer.disconnect(); // console.log('MutationObserver desconectado.'); // }, 30000); // Desconecta após 30 segundos })();