Greasy Fork

Greasy Fork is available in English.

文字和谐处理脚本

替换网页中的敏感词汇为和谐内容

您需要先安装一个扩展,例如 篡改猴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.1
// @description  替换网页中的敏感词汇为和谐内容
// @author       401
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 敏感词列表(键:需要替换的词,值:替换后的内容)
    const sensitiveWords = {
        '满足': '***',
        'b': '###',
        '测试词': '[已和谐]', // 用于测试的词汇
        // 可添加更多词汇
    };

    // 构建替换正则(取消单词边界\b,避免因特殊字符导致漏匹配;保留i忽略大小写)
    const sensitiveKeys = Object.keys(sensitiveWords).map(word =>
        // 转义特殊字符(如.、*、+等),避免正则语法错误
        word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
    );
    const regexPattern = new RegExp(`(${sensitiveKeys.join('|')})`, 'gi');

    // 替换文本节点函数
    function replaceText(node) {
        if (node.nodeType === Node.TEXT_NODE) {
            let originalText = node.textContent;
            if (!originalText) return; // 空文本直接跳过

            // 执行替换
            const replacedText = originalText.replace(regexPattern, match => {
                // 忽略大小写查找对应替换值
                const lowerMatch = match.toLowerCase();
                for (const [word, replacement] of Object.entries(sensitiveWords)) {
                    if (word.toLowerCase() === lowerMatch) {
                        console.log(`替换成功:"${match}" → "${replacement}"`); // 调试日志
                        return replacement;
                    }
                }
                return match; // 未匹配到则保持原样
            });

            // 只有内容变化时才更新,避免不必要的DOM操作
            if (replacedText !== originalText) {
                node.textContent = replacedText;
            }
        } else if (node.nodeType === Node.ELEMENT_NODE) {
            // 跳过脚本、样式、输入框等特殊标签
            const tagName = node.tagName.toUpperCase();
            if (['SCRIPT', 'STYLE', 'TEXTAREA', 'INPUT'].includes(tagName)) {
                return;
            }
            // 递归处理子节点
            Array.from(node.childNodes).forEach(child => replaceText(child));
        }
    }

    // 初始加载时处理页面
    replaceText(document.body);
    console.log('初始内容处理完成');

    // 监听动态内容变化(如AJAX加载、动态生成的内容)
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.TEXT_NODE) {
                    replaceText(node);
                }
            });
        });
    });

    // 启动观察者,监控整个页面的DOM变化
    observer.observe(document.body, {
        childList: true,   // 监控子节点增减
        subtree: true,    // 深入监控所有子树
        characterData: true // 监控文本内容变化
    });

})();