Safe AdBlocker + Ultra Performance

Visual cleanup via CSS + precise domain-based ad hiding, without breaking sites or triggering anti-adblock

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Safe AdBlocker + Ultra Performance
// @namespace    https://tampermonkey.net/
// @version      1.8
// @description  Visual cleanup via CSS + precise domain-based ad hiding, without breaking sites or triggering anti-adblock
// @author       Rubystance
// @license      MIT
// @match        https://donaldco.in/*
// @match        https://freeltc.online/*
// @match        https://zerads.com/*
// @match        https://claimcrypto.in/*
// @match        https://claimcoin.in/*
// @match        https://starlavinia.name.tr/*
// @match        https://rimakoko.com/*
// @match        https://faucetcrypto.com/*
// @match        https://eftacrypto.com/*
// @match        https://keran.co/*
// @match        https://wheelofgold.com/*
// @match        https://bagi.co.in/*
// @match        https://blockpulse.fun/*
// @match        https://viefaucet.com/*
// @match        https://ourcoincash.xyz/*
// @match        https://coinkeel.com/*
// @match        https://bitcotasks.com/*
// @exclude      https://earnbitmoon.club/*
// @run-at       document-start
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    const style = document.createElement('style');
    style.textContent = `
        *,
        *::before,
        *::after {
            animation-duration: 0.001ms !important;
            animation-iteration-count: 1 !important;
            transition-duration: 0.001ms !important;
            transition-delay: 0ms !important;
            scroll-behavior: auto !important;
        }

        * {
            filter: none !important;
            backdrop-filter: none !important;
            box-shadow: none !important;
            text-shadow: none !important;
        }

        [class*="animate-"],
        [class*="motion-"],
        [class*="transition-"],
        [class*="duration-"],
        [class*="ease-"] {
            animation: none !important;
            transition: none !important;
        }

        /* Generic ad / banner containers */
        [id*="ad-"],
        [id^="ad"],
        [id*="ads"],
        [id*="banner"],
        [id*="promo"],
        [id*="sponsor"],
        [id*="marketing"],
        [class*="ad-"],
        [class^="ad"],
        [class*="ads"],
        [class*="banner"],
        [class*="promo"],
        [class*="sponsor"],
        [class*="marketing"] {
            display: none !important;
            visibility: hidden !important;
            opacity: 0 !important;
            pointer-events: none !important;
        }

        /* Iframe ads (hidden, not blocked) */
        iframe {
            max-width: 0 !important;
            max-height: 0 !important;
            opacity: 0 !important;
            pointer-events: none !important;
        }

        /* Cookie / GDPR banners */
        [id*="cookie"],
        [class*="cookie"],
        [id*="consent"],
        [class*="consent"],
        [aria-label*="cookie"],
        [aria-label*="consent"] {
            display: none !important;
        }

        /* Floating elements without killing layout */
        [style*="position: fixed"],
        [style*="position:sticky"],
        [style*="position: sticky"] {
            z-index: auto !important;
        }

        body {
            overflow-x: hidden !important;
        }
    `;
    document.documentElement.appendChild(style);

    const originalMatchMedia = window.matchMedia;
    window.matchMedia = function (query) {
        if (query.includes('prefers-reduced-motion')) {
            return {
                matches: true,
                media: query,
                onchange: null,
                addListener: () => {},
                removeListener: () => {},
                addEventListener: () => {},
                removeEventListener: () => {},
                dispatchEvent: () => false
            };
        }
        return originalMatchMedia(query);
    };

    const originalScrollTo = window.scrollTo;
    window.scrollTo = function (options, y) {
        if (typeof options === 'object') {
            return originalScrollTo(options.left || 0, options.top || 0);
        }
        return originalScrollTo(options, y);
    };

    window.addEventListener('DOMContentLoaded', () => {

        const adDomains = [
            "a-ads.com",
            "bitmedia.io",
            "cryptocoinsad.com",
            "bank.gov.ua",
            "zerads.com",
            "cdn.bmcdn6.com",
            "faucetpay.io",
            "cdn.conzilla.com",
            "api.fpadserver.com",
            "coinzilla.com",
            "propellerads.com",
            "popads.net",
            "adsterra.com",
            "doubleclick.net",
            "googlesyndication.com",
            "media.net",
            "taboola.com",
            "widgets.adskeeper.com/*",
            "outbrain.com",
            "clck.adskeeper.com",
            "cIck.adskeeper.com",
            "revcontent.com",
            "mgid.com"
        ];

        function isAdUrl(url) {
            if (!url) return false;
            return adDomains.some(domain => url.includes(domain));
        }

        function hideEl(el) {
            el.style.display = 'none';
            el.setAttribute('data-hidden-by', 'safe-adblocker');
        }

        function process() {
            const elements = document.querySelectorAll('iframe[src], script[src], img[src]');
            elements.forEach(el => {
                if (el.hasAttribute('data-hidden-by')) return;
                const src = el.getAttribute('src');
                if (isAdUrl(src)) hideEl(el);
            });
        }

        setTimeout(process, 3000);
        setInterval(process, 3000);

        const observer = new MutationObserver(process);
        observer.observe(document.body, { childList: true, subtree: true });
    });

})();