如何使用Tampermonkey为论坛页面添加一键忽略用户按钮
Tampermonkey 论坛用户屏蔽脚本 新增一键忽略按钮实现
你原有脚本的屏蔽列表是硬编码的常量,刷新页面后手动添加的屏蔽ID会丢失,要实现点击按钮一键加屏蔽,需要做三处核心调整:
- 替换硬编码的常量屏蔽列表为Tampermonkey本地持久化存储,保证新增的屏蔽规则长期生效
- 遍历页面所有class为
post-head的元素,注入自定义忽略按钮,增加重复注入判断 - 封装原有屏蔽逻辑为可重复调用的函数,点击按钮后屏蔽即时生效,不需要刷新页面
完整修改后代码
直接替换你原有脚本的全部内容保存即可:
// ==UserScript== // @name TempleOS Ignorer with added Braed Ignoring // @include *://v3rmillion.net/* // @grant GM_setValue // @grant GM_getValue // @run-at document-end // ==/UserScript== // 初始化屏蔽列表:优先读取本地存储的规则,无存储时使用默认屏蔽ID let ignore = GM_getValue('ignoredUserIds', ['189822','695729', '1797404', '1439', '1290050', '941293', '1696676', '440792', '1391811', '114505']) // 屏蔽逻辑封装:遍历页面移除所有屏蔽列表内用户的内容 function runBlock() { // 移除列表页的用户主题条目 Array.from(document.getElementsByClassName('author')) .filter(author => { const uidMatch = author.firstElementChild?.getAttribute('href')?.match(/=([0-9]+)/) return uidMatch && ignore.includes(uidMatch[1]) }) .forEach(author => author.closest('.threadbit, .postbit')?.remove()) // 移除详情页的用户回复内容 Array.from(document.getElementsByClassName('author_information')) .filter(author => { const profileLink = author.firstElementChild?.firstElementChild?.firstElementChild const uidMatch = profileLink?.getAttribute('href')?.match(/=([0-9]+)/) return uidMatch && ignore.includes(uidMatch[1]) }) .forEach(author => author.closest('.post')?.remove()) } // 页面加载完成先执行一次默认屏蔽 runBlock() // 给所有帖子头部注入忽略按钮 function injectIgnoreButtons() { document.querySelectorAll('.post-head').forEach(headEl => { // 已经注入过按钮的直接跳过 if (headEl.querySelector('.custom-ignore-btn')) return // 提取当前帖子对应用户的UID const userProfileLink = headEl.querySelector('a[href*="member.php?action=profile&uid="]') if (!userProfileLink) return const targetUid = userProfileLink.getAttribute('href').match(/uid=([0-9]+)/)[1] // 已经在屏蔽列表的用户直接移除内容,不需要显示按钮 if (ignore.includes(targetUid)) { headEl.closest('.post, .threadbit')?.remove() return } // 创建按钮元素 const ignoreBtn = document.createElement('button') ignoreBtn.className = 'custom-ignore-btn' ignoreBtn.innerText = '忽略该用户' // 简单适配论坛默认按钮样式 ignoreBtn.style.cssText = 'margin-left: 8px; padding: 2px 7px; font-size: 12px; cursor: pointer; vertical-align: middle;' // 绑定点击屏蔽事件 ignoreBtn.addEventListener('click', () => { if (ignore.includes(targetUid)) return // 新UID加入屏蔽列表 ignore.push(targetUid) // 持久化存储到本地 GM_setValue('ignoredUserIds', ignore) // 即时执行屏蔽,无需刷新页面 runBlock() }) // 按钮插入到帖子头部 headEl.appendChild(ignoreBtn) }) } // 首次加载注入按钮 injectIgnoreButtons() // 监听DOM动态变化,论坛翻页、局部加载新内容时自动补注按钮 const domObserver = new MutationObserver(injectIgnoreButtons) domObserver.observe(document.body, { childList: true, subtree: true })
改动说明
- 把原来多层
parentElement找父节点的写法换成了closest()方法,不会因为论坛小幅度调整DOM结构就导致屏蔽失效 - 新增了DOM监听,论坛动态加载、翻页时不会出现按钮丢失、漏屏蔽的问题
- 点击按钮后屏蔽即时生效,不需要手动刷新页面
- 原有默认屏蔽的用户列表不会丢失,第一次运行脚本时会自动导入
- 如果后续要清空屏蔽列表,可以在Tampermonkey脚本的存储菜单里手动清除对应存储值
内容的提问来源于stack exchange,提问作者Despairity
相关产品推荐
相关产品推荐

