您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动在敏感词中间插入零宽空格。
// ==UserScript== // @name Bangumi Anti-敏感词 // @description 自动在敏感词中间插入零宽空格。 // @version 1.0.3 // @author wataame // @match *://bgm.tv/* // @match *://chii.in/* // @match *://bangumi.tv/* // @grant none // @license MIT // @namespace https://greasyfork.org/users/1389779 // ==/UserScript== (function() { 'use strict'; // 内置敏感词库 const DEFAULT_WORDS = [ "白粉", "香艳", "习近平", "服务中心", "李克强", "支那", "前列腺", "办证", "辦證", "毕业证", "畢業證", "冰毒", "安乐死", "腾讯", "隐形眼镜", "聊天记录", "枪", "电动车", "医院", "烟草", "早泄", "精神病", "毒枭", "春节", "当场死亡", "步枪", "步槍", "春药", "春藥", "大发", "大發", "大麻", "代开", "代開", "迷药", "代考", "贷款", "貸款", "发票", "發票", "海洛因", "妓女", "可卡因", "批发", "批發", "皮肤病", "皮膚病", "嫖娼", "窃听器", "竊听器", "上门服务", "上門服务", "商铺", "商鋪", "手枪", "手槍", "铁枪", "鐵枪", "钢枪", "鋼枪", "特殊服务", "特殊服務", "騰訊", "罂粟", "牛皮癣", "甲状腺", "假钞", "香烟", "香煙", "学位证", "學位證", "摇头丸", "搖頭丸", "援交", "找小姐", "找小妹", "作弊", "v信", "医疗政策", "迷魂药", "迷情粉", "迷藥", "麻醉药", "肛门", "麻果", "麻古", "假币", "私人侦探", "提现", "借腹生子", "代孕", "客服电话", "刻章", "套牌车", "麻将机", "走私" ]; // 零宽空格字符 const ZERO_WIDTH_SPACE = '\u200B'; // 直接使用内置词库 const sensitiveWords = DEFAULT_WORDS; // 处理敏感词 function processSensitiveWords(text) { let result = text; if (!Array.isArray(sensitiveWords)) { console.warn('Sensitive words list is not an array.'); return text; // Return original text if words list is invalid } sensitiveWords.forEach(word => { if (typeof word === 'string' && word.length > 1) { try { const mid = Math.floor(word.length / 2); const replacement = word.slice(0, mid) + ZERO_WIDTH_SPACE + word.slice(mid); // 确保word中的特殊正则字符被转义 const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); result = result.replace(new RegExp(escapedWord, 'g'), replacement); } catch (e) { console.error(`Error processing word "${word}":`, e); } } }); return result; } // 监听输入框 function bindInputs() { const selectors = [ '#title', '#content', '#tpc_content', '#comment', 'textarea', 'input[type="text"]' ]; selectors.forEach(selector => { document.querySelectorAll(selector).forEach(element => { if (element.dataset.sensitiveProcessed) return; // 避免重复绑定 element.dataset.sensitiveProcessed = 'true'; element.addEventListener('blur', function() { const processed = processSensitiveWords(this.value); if (processed !== this.value) { this.value = processed; } }); }); }); } // 监听页面变化 function observeChanges() { const observer = new MutationObserver(() => bindInputs()); observer.observe(document.body, { childList: true, subtree: true }); } // 初始化 function init() { bindInputs(); observeChanges(); } // 启动 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();