You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:51:24