禁止网页更改标题栏颜色

强制PWA标题栏颜色,强制保持指定颜色

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         禁止网页更改标题栏颜色
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  强制PWA标题栏颜色,强制保持指定颜色
// @author       hiisme
// @match        https://www.icloud.com/photos/
// @match        https://www.xiaohongshu.com/*
// @match        https://chatglm.cn/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    // 配置不同网站的颜色
    const colorConfig = {
        'icloud.com': '#121212',
        'xiaohongshu.com': '#0A0A0A',
        'chatglm.cn': '#2B2E30',
    };

    // 获取当前网站的颜色配置
    function getColorForCurrentSite() {
        const hostname = window.location.hostname;
        for (const [site, color] of Object.entries(colorConfig)) {
            if (hostname.includes(site)) {
                return color;
            }
        }
        return '#121212'; // 默认颜色
    }

    // 设置或恢复标题栏颜色
    function enforceTitleBarColor() {
        let meta = document.querySelector('meta[name="theme-color"]');
        if (!meta) {
            meta = document.createElement('meta');
            meta.name = 'theme-color';
            document.head.appendChild(meta);
        }
        const color = getColorForCurrentSite();
        if (meta.content !== color) {
            meta.content = color;
        }
    }

    // 禁止对 theme-color 的不必要更改
    function blockThemeColorChanges() {
        const observer = new MutationObserver((mutations) => {
            mutations.forEach(mutation => {
                if (mutation.type === 'attributes' && mutation.attributeName === 'content') {
                    let target = mutation.target;
                    if (target.getAttribute('name') === 'theme-color') {
                        const color = getColorForCurrentSite();
                        if (target.content !== color) {
                            target.content = color; // 强制恢复颜色
                        }
                    }
                }
            });
        });

        const meta = document.querySelector('meta[name="theme-color"]');
        if (meta) {
            observer.observe(meta, { attributes: true });
        }
        enforceTitleBarColor(); // 初次设置颜色
    }

    // 防止网页动态创建或修改 theme-color 元素
    function interceptHeadModifications() {
        const originalAppendChild = HTMLElement.prototype.appendChild;
        HTMLElement.prototype.appendChild = function(element) {
            if (element.tagName === 'META' && element.name === 'theme-color') {
                element.content = getColorForCurrentSite(); // 根据网站设置颜色
            }
            return originalAppendChild.call(this, element);
        };
    }

    // 在页面加载前就开始拦截和观察
    interceptHeadModifications();
    document.addEventListener('DOMContentLoaded', blockThemeColorChanges);
})();