Enhanced Web Page Optimizer

Improve web page performance by blocking ads, lazy-loading images, and removing intrusive elements.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         Enhanced Web Page Optimizer
// @namespace    https://discord.gg/gFNAH7WNZj
// @version      1.4
// @description  Improve web page performance by blocking ads, lazy-loading images, and removing intrusive elements.
// @author       Bacon But Pro
// @match        *://*/*
// @grant        none
// @icon         https://cdn141.picsart.com/351217840073211.png
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    const blockedDomains = [
        'doubleclick.net', 'googlesyndication.com', 'google-analytics.com',
        'adsafeprotected.com', 'adnxs.com', 'rubiconproject.com',
        'pubmatic.com', 'scorecardresearch.com', 'bluekai.com',
        'facebook.net', 'amazon-adsystem.com', 'ads-twitter.com',
        'criteo.com', 'taboola.com', 'outbrain.com',
        'cdn.ampproject.org', 'quantserve.com', 'googletagmanager.com',
        'gemini.yahoo.com'
    ];

    const blockAds = () => {
        document.querySelectorAll('script[src], iframe[src]').forEach(el => {
            if (blockedDomains.some(domain => el.src.includes(domain))) {
                el.remove();
            }
        });
    };

    const adObserver = new MutationObserver(blockAds);
    adObserver.observe(document.documentElement, { childList: true, subtree: true });

    const enableLazyLoading = () => {
        const images = document.querySelectorAll('img:not([loading])');
        images.forEach(img => img.setAttribute('loading', 'lazy'));

        const lazyLoadObserver = new IntersectionObserver(entries => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    const img = entry.target;
                    if (img.dataset.src) {
                        img.src = img.dataset.src;
                    }
                    lazyLoadObserver.unobserve(img);
                }
            });
        });

        images.forEach(img => {
            if (!img.src && img.dataset.src) {
                img.src = img.dataset.src;
            }
            lazyLoadObserver.observe(img);
        });
    };

    document.addEventListener('DOMContentLoaded', enableLazyLoading);

    const intrusiveSelectors = [
        '.popup', '.ad-banner', '#subscribe-modal', '.overlay'
    ];

    const removeIntrusiveElements = () => {
        intrusiveSelectors.forEach(selector => {
            document.querySelectorAll(selector).forEach(el => el.remove());
        });
    };

    const intrusiveObserver = new MutationObserver(removeIntrusiveElements);
    intrusiveObserver.observe(document.documentElement, { childList: true, subtree: true });
    document.addEventListener('DOMContentLoaded', removeIntrusiveElements);

    const essentialButtonSelectors = ['button.important', '.keep-this-button'];

    const preserveEssentialButtons = () => {
        essentialButtonSelectors.forEach(selector => {
            document.querySelectorAll(selector).forEach(el => {
                el.style.display = 'block';
            });
        });
    };

    const buttonObserver = new MutationObserver(preserveEssentialButtons);
    buttonObserver.observe(document.documentElement, { childList: true, subtree: true });
    document.addEventListener('DOMContentLoaded', preserveEssentialButtons);
})();