// ==UserScript== // @name 微博知乎B站小红书关键词屏蔽器 // @namespace http://tampermonkey.net/ // @version 2.2.1 // @description 屏蔽微博、知乎、小红书、B站含关键词的内容,支持自定义管理 // @author KasenRi // @match https://www.zhihu.com/ // @match https://www.xiaohongshu.com/* // @match https://www.bilibili.com/ // @match https://www.bilibili.com/?* // @match https://www.bilibili.com/v/* // @match https://search.bilibili.com/* // @match https://weibo.com/* // @match https://www.weibo.com/* // @match https://s.weibo.com/* // @icon https://picx.zhimg.com/v2-fab9e4d5ddf148b93df597a86b0525fd_l.jpg?source=32738c0c&needBackground=1 // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/543102/%E5%BE%AE%E5%8D%9A%E7%9F%A5%E4%B9%8EB%E7%AB%99%E5%B0%8F%E7%BA%A2%E4%B9%A6%E5%85%B3%E9%94%AE%E8%AF%8D%E5%B1%8F%E8%94%BD%E5%99%A8.user.js // @updateURL https://update.greasyfork.icu/scripts/543102/%E5%BE%AE%E5%8D%9A%E7%9F%A5%E4%B9%8EB%E7%AB%99%E5%B0%8F%E7%BA%A2%E4%B9%A6%E5%85%B3%E9%94%AE%E8%AF%8D%E5%B1%8F%E8%94%BD%E5%99%A8.meta.js // ==/UserScript== /* * 开源Fork声明 / Open Source Fork Declaration * * 本脚本基于以下原始作品二次开发而成: * This script is forked and merged from the following original works: * * 1. 知乎屏蔽词修改器 * 作者/Author: 三无用户 * 来源/Source: https://www.zhihu.com/question/1920892831981106398/answer/1928760410783343183 * * 2. 微博/B站/小红书屏蔽器 * 作者/Author: Andante * 来源/Source: https://www.zhihu.com/question/1920892831981106398/answer/1929126813218631948 * * 感谢原作者的贡献! * Thanks to the original authors for their contributions! * * 本脚本采用MIT许可证开源 * This script is open-sourced under MIT License */ (function() { 'use strict'; // 默认的屏蔽关键词列表 const DEFAULT_KEYWORDS = [ '男','女','父亲','母亲','大龄剩女','男性','女性','coser','儿子','体育生', '女儿','迪士尼','盲盒','奶茶','COSER','漫展','小孩','结婚','生娃','华为', '大龄女','大妈','单亲','女生','美女','女神','小姐姐','男子','女演员', '健身房','JK','身材','985','211','小米','妈','妈妈','生物爹','原生家庭', '今日俄罗斯' ]; // 存储和获取屏蔽关键词 const STORAGE_KEY = 'keyword_blocker_words'; const DISABLED_SITES_KEY = 'keyword_blocker_disabled_sites'; function saveKeywords(keywords) { localStorage.setItem(STORAGE_KEY, JSON.stringify(keywords)); } function loadKeywords() { try { const saved = localStorage.getItem(STORAGE_KEY); return saved ? JSON.parse(saved) : [...DEFAULT_KEYWORDS]; } catch (e) { console.error('加载屏蔽词失败:', e); return [...DEFAULT_KEYWORDS]; } } // 禁用网站管理 function saveDisabledSites(sites) { localStorage.setItem(DISABLED_SITES_KEY, JSON.stringify(sites)); } function loadDisabledSites() { try { const saved = localStorage.getItem(DISABLED_SITES_KEY); return saved ? JSON.parse(saved) : []; } catch (e) { console.error('加载禁用网站失败:', e); return []; } } function isCurrentSiteDisabled() { const disabledSites = loadDisabledSites(); const currentSite = getCurrentSite(); return disabledSites.includes(currentSite); } function disableCurrentSite() { const disabledSites = loadDisabledSites(); const currentSite = getCurrentSite(); if (!disabledSites.includes(currentSite)) { disabledSites.push(currentSite); saveDisabledSites(disabledSites); } } function enableCurrentSite() { const disabledSites = loadDisabledSites(); const currentSite = getCurrentSite(); const index = disabledSites.indexOf(currentSite); if (index > -1) { disabledSites.splice(index, 1); saveDisabledSites(disabledSites); } } // 当前屏蔽关键词列表 let BLOCK_KEYWORDS = loadKeywords(); // 获取当前网站类型 function getCurrentSite() { const hostname = window.location.hostname; if (hostname.includes('zhihu.com')) return 'zhihu'; if (hostname.includes('xiaohongshu.com')) return 'xiaohongshu'; if (hostname.includes('bilibili.com')) return 'bilibili'; if (hostname.includes('weibo.com')) return 'weibo'; return 'unknown'; } // 网站特定的配置 const siteConfigs = { zhihu: { containerSelector: '.ContentItem', titleSelector: '.ContentItem-title a', logPrefix: '已屏蔽知乎问题' }, xiaohongshu: { containerSelector: 'section.note-item', titleSelector: 'a.title, .title', logPrefix: '已屏蔽小红书内容' }, bilibili: { containerSelector: '.bili-feed-card, .bili-video-card', titleSelector: '.bili-video-card__info--tit, .bili-video-card__info--tit a, .bili-video-card__wrap .bili-video-card__info--tit', logPrefix: '已屏蔽B站内容' }, weibo: { containerSelector: '.wbpro-scroller-item', titleSelector: '.wbpro-feed-content .detail_wbtext_4CRf9', logPrefix: '已屏蔽微博内容' } }; // 创建管理UI function createManagementUI() { // 创建CSS样式 const style = document.createElement('style'); style.textContent = ` #keyword-blocker-toggle { position: fixed; left: 20px; top: 50%; transform: translateY(-50%); z-index: 10000; background: #1890ff; color: white; border: none; border-radius: 6px; padding: 12px 8px; cursor: pointer; font-size: 14px; box-shadow: 0 2px 8px rgba(0,0,0,0.15); transition: all 0.3s ease; writing-mode: vertical-lr; text-orientation: mixed; } #keyword-blocker-toggle:hover { background: #40a9ff; transform: translateY(-50%) scale(1.05); } #keyword-blocker-panel { position: fixed; left: -350px; top: 50%; transform: translateY(-50%); z-index: 9999; width: 320px; max-height: 70vh; background: white; border: 1px solid #d9d9d9; border-radius: 8px; box-shadow: 0 4px 16px rgba(0,0,0,0.15); transition: left 0.3s ease; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } #keyword-blocker-panel.show { left: 20px; } .kb-panel-header { padding: 16px; border-bottom: 1px solid #f0f0f0; background: #fafafa; border-radius: 8px 8px 0 0; } .kb-title-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .kb-panel-title { margin: 0; font-size: 16px; font-weight: 500; color: #262626; flex: 1; } .kb-input-group { display: flex; gap: 8px; } .kb-input { flex: 1; padding: 8px 12px; border: 1px solid #d9d9d9; border-radius: 4px; font-size: 14px; outline: none; } .kb-input:focus { border-color: #1890ff; box-shadow: 0 0 0 2px rgba(24,144,255,0.2); } .kb-btn { padding: 8px 16px; background: #1890ff; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 14px; transition: background 0.3s ease; } .kb-btn:hover { background: #40a9ff; } .kb-btn-danger { background: #ff4d4f; } .kb-btn-danger:hover { background: #ff7875; } .kb-list-container { max-height: calc(70vh - 120px); overflow-y: auto; padding: 0; } .kb-list { list-style: none; margin: 0; padding: 0; } .kb-list-item { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; border-bottom: 1px solid #f0f0f0; transition: background 0.2s ease; } .kb-list-item:hover { background: #f5f5f5; } .kb-keyword { flex: 1; font-size: 14px; color: #262626; word-break: break-all; } .kb-delete-btn { padding: 4px 8px; background: #ff4d4f; color: white; border: none; border-radius: 3px; cursor: pointer; font-size: 12px; transition: background 0.3s ease; } .kb-delete-btn:hover { background: #ff7875; } .kb-confirm-group { display: flex; gap: 8px; } .kb-confirm-btn { padding: 4px 8px; border: none; border-radius: 3px; cursor: pointer; font-size: 12px; transition: background 0.3s ease; } .kb-confirm-delete { background: #ff4d4f; color: white; } .kb-confirm-delete:hover { background: #ff7875; } .kb-confirm-cancel { background: #8c8c8c; color: white; } .kb-confirm-cancel:hover { background: #a6a6a6; } .kb-stats { padding: 12px 16px; background: #f9f9f9; border-top: 1px solid #f0f0f0; font-size: 12px; color: #666; text-align: center; border-radius: 0 0 8px 8px; } .kb-close-btn { position: absolute; top: 10px; right: 10px; background: none; border: none; font-size: 18px; cursor: pointer; color: #999; padding: 4px; border-radius: 3px; transition: all 0.2s ease; } .kb-close-btn:hover { background: #f0f0f0; color: #666; } .kb-disable-site-btn { padding: 4px 8px; background: #8c8c8c; color: white; border: none; border-radius: 3px; cursor: pointer; font-size: 10px; white-space: nowrap; margin-left: 12px; transition: background 0.3s ease; } .kb-disable-site-btn:hover { background: #a6a6a6; } `; document.head.appendChild(style); // 创建切换按钮 const toggleBtn = document.createElement('button'); toggleBtn.id = 'keyword-blocker-toggle'; toggleBtn.textContent = '屏蔽词管理'; document.body.appendChild(toggleBtn); // 创建管理面板 const panel = document.createElement('div'); panel.id = 'keyword-blocker-panel'; const currentSite = getCurrentSite(); const siteNames = { 'zhihu': '知乎', 'xiaohongshu': '小红书', 'bilibili': 'B站', 'weibo': '微博' }; const siteName = siteNames[currentSite] || '当前网站'; const isDisabled = isCurrentSiteDisabled(); const btnText = isDisabled ? `重新启用${siteName}屏蔽` : `有BUG?停止屏蔽${siteName}`; const statusText = isDisabled ? `⚠️ ${siteName}屏蔽功能已停用` : '屏蔽词管理'; panel.innerHTML = `