Skip to content

Cedriccmh/linuxdo-filter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Linux.do 标签过滤器

🎯 一个简洁高效的 Tampermonkey 脚本,帮你过滤 Linux.do 论坛中不想看的内容

Version License Tampermonkey Lines

特性安装使用配置FAQ


✨ 特性

核心功能

  • 🚫 黑名单过滤 - 隐藏指定标签的 topics
  • 即时生效 - 新内容自动过滤,无闪烁
  • 📊 详细统计 - 实时统计过滤数据

高级特性

  • 🔄 智能加载 - 提前 800px 预加载 ⭐
  • 🎛️ 菜单管理 - 可视化配置界面
  • 🐛 调试模式 - 可选的详细日志

📦 安装

前置要求

安装 Tampermonkey 浏览器扩展:

安装脚本

方法一:一键安装(推荐)⭐

点击下方链接,Tampermonkey 会自动弹出安装提示:

🚀 点击安装 linuxdo-tag-filter.user.js

然后访问 Linux.do 开始使用 🎉

方法二:手动安装

  1. 查看 linuxdo-tag-filter.user.js 脚本源码
  2. 复制 全部代码
  3. 打开 Tampermonkey → 创建新脚本
  4. 粘贴 并保存 (Ctrl+S)
  5. 访问 Linux.do 开始使用 🎉

🚀 使用

快速开始

脚本默认过滤 "抽奖" 标签,开箱即用。

管理黑名单

点击浏览器工具栏的 Tampermonkey 图标 打开菜单:

┌─────────────────────────────────┐
│ ✅ 启用标签过滤                   │  # 总开关
│ ➕ 添加黑名单标签                  │  # 添加新标签
│ 🗑️ 清空黑名单                     │  # 清空所有
│ ❌ 抽奖                           │  # 点击删除
│ 📊 查看过滤统计                   │  # 查看数据
│ ✅ 自动加载更多                   │  # 智能预加载 ⭐
│    调试模式                       │  # 开发者模式
└─────────────────────────────────┘

常用操作

添加黑名单标签
  1. 点击 "➕ 添加黑名单标签"
  2. 输入标签名(如 广告水贴
  3. 确认,页面自动刷新 ✓
查看过滤统计

点击 "📊 查看过滤统计" 查看详细数据:

📊 过滤统计信息
══════════════════════════════

📄 总 Topics 数:150
🚫 已过滤数量:25
✅ 显示数量:125
📈 过滤率:16.7%

──────────────────────────────
🏷️  各标签过滤统计:

  • 抽奖: 20 个 (13.3%)
  • 广告: 5 个 (3.3%)

──────────────────────────────

⚙️  状态:✅ 已启用
🔍 调试:关闭
临时禁用过滤
  1. 点击 "✅ 启用标签过滤" 禁用
  2. 页面刷新,显示所有内容
  3. 再次点击恢复过滤

⚙️ 配置

默认配置

{
  "enabled": true,
  "blacklist": ["抽奖"],
  "debug": false,
  "autoLoad": true
}

手动配置

在浏览器控制台 (F12) 中执行:

// 查看当前配置
console.log(GM_getValue('ld_tag_filter_config_v1'));

// 批量导入黑名单
const config = {
  enabled: true,
  blacklist: ["抽奖", "广告", "水贴", "转发"],
  debug: false,
  autoLoad: true
};
GM_setValue('ld_tag_filter_config_v1', JSON.stringify(config));
location.reload();

💡 FAQ

为什么有些 topics 没被过滤?

原因:标签名称不匹配

解决方法

  1. 按 F12 打开控制台
  2. 启用 "调试模式"
  3. 刷新页面,查看日志中的实际标签名
  4. 确保黑名单中的标签完全一致(包括大小写)

示例

  • 抽獎 (繁体) ≠ 抽奖 (简体)
  • 抽奖 = 抽奖
配置会丢失吗?

不会。配置保存在浏览器本地存储中,除非:

  • 手动清除浏览器数据
  • 卸载浏览器扩展
如何重置配置?

控制台执行:

GM_deleteValue('ld_tag_filter_config_v1');
location.reload();
脚本会影响性能吗?

不会!v4.x 经过精心优化:

  • ✅ 代码精简高效(686 行)
  • ✅ 智能去重,避免重复处理
  • ✅ 即时过滤,零延迟
  • ✅ 高效统计,实时更新
  • ✅ 智能清理,避免内存泄漏
自动加载是如何工作的?

脚本使用三重策略确保无缝浏览:

  1. 提前触发 - 距离底部 800px 时预加载
  2. 智能补充 - 可见内容少于 15 个时自动加载
  3. DOM 监听 - 检测新内容后继续加载

原理:直接调用 Discourse 内部 API (model.list.loadMore())

点击帖子后返回,自动加载还有效吗?

有效!v4.1.0 已修复此问题。

工作原理

  1. 脚本监听 URL 变化(SPA 路由切换)
  2. 检测到返回列表页时,自动重新初始化自动加载
  3. 清理旧的监听器,避免内存泄漏

支持场景

  • ✅ 浏览器前进/后退
  • ✅ 点击论坛内链接
  • ✅ 从帖子详情返回
  • ✅ 不同列表页切换

提示:开启调试模式可查看详细的路由切换日志

如何开启调试模式?
  1. 点击菜单中的 "调试模式"
  2. 打开控制台 (F12)
  3. 查看详细日志,前缀为 [标签过滤器]

调试日志示例

[标签过滤器] v4.1.0 初始化中...
[标签过滤器] ✓ CSS 样式已注入
[标签过滤器] ✓ 初始过滤完成:已过滤 5/30 个 topics
[标签过滤器] ✓ Discourse 已加载(第 3 次检测)
[标签过滤器] ✓ 自动加载已启动(API调用 + 提前800px触发)
[标签过滤器] URL 变化: https://linux.do/t/12345 → https://linux.do/latest
[标签过滤器] ✓ 检测到返回列表页,重新初始化自动加载

🔄 更新日志

v4.1.0 (2025-10-30) - SPA 路由修复 🔧

Bug 修复

  • 🐛 修复自动加载失效问题 - 点击进入帖子后返回主页面,自动加载功能不再失效
  • 🔄 SPA 路由监听 - 监听 pushStatereplaceStatepopstate 事件
  • ♻️ 智能重新初始化 - 返回列表页时自动重新初始化自动加载功能
  • 🧹 资源清理 - 离开列表页时清理监听器,避免内存泄漏

技术改进

  • ✅ 监听 URL 变化(history.pushState/replaceState/popstate
  • ✅ 检测列表页路径(/latest/top/hot、主页)
  • ✅ 清理旧的 IntersectionObserver 和 MutationObserver
  • ✅ 延迟重新初始化,等待 DOM 更新完成

适用场景

  • ✅ 浏览器前进/后退按钮
  • ✅ 点击论坛内部链接
  • ✅ 从帖子详情返回列表
  • ✅ 在不同列表页间切换

v4.0.0 (2025-10-30) - 激进优化版 ⭐

重大优化

  • 🗑️ 代码精简 33.5% (893 → 594 行)
  • ⚡ 性能提升,启动更快
  • 🧹 删除冗余代码和开发调试功能
  • 📦 更易维护的代码结构

删除内容

  • ❌ 诊断函数 (-146 行)
  • ❌ 属性监听器 (-34 行)
  • ❌ CSS 验证逻辑 (-14 行)
  • ❌ 重复函数和过度日志 (-100+ 行)

优化改进

  • ✅ 提取常量 TOPIC_SELECTORS
  • ✅ 简化重试机制
  • ✅ 精简日志输出
  • ✅ 优化代码逻辑

功能完整性

  • ✅ 所有核心功能保留
  • ✅ 自动加载更加稳定
  • ✅ 过滤机制更高效
查看历史版本

v3.2.0 (2025-10-30)

  • 🔧 修复 unsafeWindow 访问问题
  • 🎯 使用页面真实 window 对象
  • ✅ 解决 Discourse 不可用错误

v3.0.0 (2025-10-30)

  • 🚀 主动调用 Discourse API
  • 📡 直接调用 model.list.loadMore()
  • 🎯 提前 800px 触发加载

v1.5.0 (2025-10-30)

  • 🔄 新增自动加载更多功能
  • 🎯 智能滚动监听

v1.0.0 (2025-10-30)

  • 🎉 初始版本发布
  • 🚫 黑名单过滤
  • 🎛️ 菜单管理

🛠️ 技术架构

┌─────────────────────────────────────┐
│          页面加载 (1s 延迟)           │
└─────────────────┬───────────────────┘
                  │
         ┌────────▼────────┐
         │  轮询检测 Discourse  │
         │   (每 0.5s)         │
         └────────┬────────┘
                  │
         ┌────────▼────────┐
         │  初始化自动加载    │
         └────────┬────────┘
                  │
    ┌─────────────┼─────────────┐
    │             │             │
┌───▼───┐    ┌───▼───┐    ┌───▼───┐
│ 过滤器  │    │ 滚动监听 │    │ DOM监听 │
│ 立即过滤 │    │ 800px   │    │ 智能补充 │
└────────┘    └────────┘    └───┬───┘
                                 │
                         ┌───────▼───────┐
                         │  SPA 路由监听   │
                         │  URL 变化检测   │
                         └───────┬───────┘
                                 │
                    ┌────────────┴────────────┐
                    │                         │
              ┌─────▼──────┐         ┌───────▼──────┐
              │ 返回列表页   │         │  进入帖子页   │
              │ 重新初始化   │         │  清理监听器   │
              └────────────┘         └──────────────┘

核心技术

  • MutationObserver - 监听 DOM 变化
  • IntersectionObserver - 滚动位置监听
  • unsafeWindow - 访问页面对象
  • Discourse Internal API - 直接调用加载
  • History API - 监听 SPA 路由变化(v4.1.0+)
    • pushState / replaceState - 主动路由切换
    • popstate - 浏览器前进/后退

🤝 贡献

欢迎贡献!如果你有任何想法或发现了 bug:

  1. 🐛 提交 Issue
  2. 🔧 Fork 项目并提交 Pull Request
  3. ⭐ 给项目点个 Star

📄 许可证

MIT License - 自由使用、修改和分发


如果这个脚本帮到了你,请给个 ⭐ Star!

Linux.do 论坛Tampermonkey问题反馈

About

A script to filter linux.do posts based on tags

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published