Greasy Fork

Greasy Fork is available in English.

无差别模糊效果优化器

将所有backdrop-filter模糊效果替换为opacity半透明,提升网页性能

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         无差别模糊效果优化器
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  将所有backdrop-filter模糊效果替换为opacity半透明,提升网页性能
// @author       Your Name
// @match        *://*/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // 处理backdrop-filter相关样式
    function optimizeBlurEffects() {
        // 处理内联样式
        document.querySelectorAll('*').forEach(element => {
            const style = element.style;
            if (style.backdropFilter || style.webkitBackdropFilter) {
                // 将模糊效果转换为半透明
                let opacityValue = 0.8; // 默认透明度

                // 根据模糊程度调整透明度
                const blurMatch = (style.backdropFilter || style.webkitBackdropFilter).match(/blur\(([^)]+)\)/);
                if (blurMatch) {
                    const blurValue = blurMatch[1];
                    if (blurValue.includes('px')) {
                        const pxValue = parseFloat(blurValue);
                        // 模糊值越大,透明度越低(越不透明)
                        opacityValue = Math.max(0.3, 1 - (pxValue / 50));
                    }
                }

                // 彻底移除模糊效果
                style.backdropFilter = 'none';
                style.webkitBackdropFilter = 'none';
                
                // 设置背景色和透明度
                if (!style.backgroundColor || style.backgroundColor === 'transparent') {
                    style.backgroundColor = `rgba(255, 255, 255, ${opacityValue})`;
                } else {
                    // 如果已有背景色,调整其透明度
                    const bgColor = style.backgroundColor;
                    if (bgColor.startsWith('rgba')) {
                        const rgbaMatch = bgColor.match(/rgba\((\d+),\s*(\d+),\s*(\d+),\s*([\d.]+)\)/);
                        if (rgbaMatch) {
                            style.backgroundColor = `rgba(${rgbaMatch[1]}, ${rgbaMatch[2]}, ${rgbaMatch[3]}, ${opacityValue})`;
                        }
                    } else if (bgColor.startsWith('rgb')) {
                        const rgbMatch = bgColor.match(/rgb\((\d+),\s*(\d+),\s*(\d+)\)/);
                        if (rgbMatch) {
                            style.backgroundColor = `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${opacityValue})`;
                        }
                    } else if (bgColor.startsWith('#')) {
                        // 处理十六进制颜色
                        const hex = bgColor.replace('#', '');
                        let r, g, b;
                        if (hex.length === 3) {
                            r = parseInt(hex[0] + hex[0], 16);
                            g = parseInt(hex[1] + hex[1], 16);
                            b = parseInt(hex[2] + hex[2], 16);
                        } else {
                            r = parseInt(hex.substring(0, 2), 16);
                            g = parseInt(hex.substring(2, 4), 16);
                            b = parseInt(hex.substring(4, 6), 16);
                        }
                        style.backgroundColor = `rgba(${r}, ${g}, ${b}, ${opacityValue})`;
                    }
                }
            }
        });

        // 处理CSS样式表 - 更激进的方式
        const stylesheets = document.styleSheets;
        for (let i = 0; i < stylesheets.length; i++) {
            try {
                const rules = stylesheets[i].cssRules || stylesheets[i].rules;
                for (let j = 0; j < rules.length; j++) {
                    const rule = rules[j];
                    if (rule.style && (rule.style.backdropFilter || rule.style.webkitBackdropFilter)) {
                        // 直接修改规则
                        if (rule.style.backdropFilter) {
                            rule.style.backdropFilter = 'none';
                        }
                        if (rule.style.webkitBackdropFilter) {
                            rule.style.webkitBackdropFilter = 'none';
                        }
                        
                        // 添加半透明背景
                        if (!rule.style.backgroundColor || rule.style.backgroundColor === 'transparent') {
                            rule.style.backgroundColor = 'rgba(255, 255, 255, 0.8)';
                        }
                    }
                }
            } catch (e) {
                // 跨域样式表可能会抛出安全错误,忽略即可
            }
        }
    }

    // 创建全局样式覆盖所有backdrop-filter
    function createGlobalOverride() {
        const style = document.createElement('style');
        style.textContent = `
            * {
                backdrop-filter: none !important;
                -webkit-backdrop-filter: none !important;
            }
            
            [style*="backdrop-filter"], 
            [style*="-webkit-backdrop-filter"] {
                backdrop-filter: none !important;
                -webkit-backdrop-filter: none !important;
            }
        `;
        document.head.appendChild(style);
    }

    // 监听DOM变化,处理动态添加的元素
    const observer = new MutationObserver(function(mutations) {
        let shouldOptimize = false;
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes.length > 0) {
                shouldOptimize = true;
            }
        });
        if (shouldOptimize) {
            setTimeout(optimizeBlurEffects, 50);
        }
    });

    // 初始化优化
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', function() {
            createGlobalOverride();
            optimizeBlurEffects();
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        });
    } else {
        createGlobalOverride();
        optimizeBlurEffects();
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    }

    // 定期检查,确保没有漏网之鱼
    setInterval(optimizeBlurEffects, 1000);

    console.log('无差别模糊效果优化脚本已加载 - 所有模糊效果已被替换');
})();