Greasy Fork

Greasy Fork is available in English.

RSS Feed 查找器

检测当前网站的feed,方便订阅RSS内容。

作者
Gholts
日安装量
0
总安装量
2
评分
0 0 0
版本
13.0
创建于
2025-10-08
更新于
2025-10-08
大小
18.4 KB
许可证
AGPL-3.0
适用于
所有网站

总结

Feed Finder 是一个 Violentmonkey 用户脚本,旨在自动侦测并显示当前网页上的 RSS、Atom 或 JSON 订阅源。它通过一个多阶段的探索流程运作,包含特定站点规则、DOM 扫描及网络探测。找到的订阅源会显示在一个方便且不干扰的浮动小工具中,该小工具会显示可用的订阅源数量,并可展开以呈现包含其标题和网址的可点击列表。此脚本针对现代网页浏览进行了优化,支持单页应用程序(SPA),并采用高效的防抖动执行机制以最小化对性能的影响。

主要功能

  • 多方面探索机制: 该脚本采用一个有优先顺序的三阶段方法,以最大化找到订阅源的机会。

    1. 特定站点规则: 首先检查针对特定域名(例如 github.commedium.com)的硬编码规则。这些规则根据 URL 结构提供高精准度的订阅源链接,例如 GitHub 存储库的 commits 或 releases 链接。
    2. DOM 扫描: 如果没有适用的站点规则,脚本会扫描页面的 HTML,寻找通常指向订阅源的 <link><a> 元素。它根据 type 属性(如 application/rss+xml)、rel="alternate" 以及包含 rssfeed 等关键字或 .xml 等扩展名的 href 属性来识别它们。
    3. 网络探测: 作为最后一步,它会组合并探测相对于网站域名和当前路径的常见订阅源路径(例如 /feed/rss.xml)。它使用高效的 HEAD 请求来检查响应的 Content-Type 标头,以确认该 URL 是否指向一个有效的订阅源,而无需下载整个文件。
  • 动态且不干扰的 UI:

    • 浮动小工具: 一个小型的圆形小工具被放置在页面的右下角。
    • 订阅源计数器: 当折叠时,小工具会显示发现的订阅源数量。
    • 可扩展列表: 点击小工具会将其展开为一个面板,列出所有找到的订阅源及其可点击的标题和完整 URL。
  • 单页应用程序(SPA)支持: 该脚本能主动监控在现代 Web 应用中常见的、无需完全重新加载页面的 URL 变化。通过修补(patch)history.pushStatehistory.replaceState 并监听导航事件(popstatehashchange),它能在页内导航时自动重新执行探索过程。

  • 高效率与优化设计:

    • 防抖动(Debounce): 探索动作和 URL 变化检查都经过防抖动处理,以防止在快速导航或 DOM 变化期间过度执行。
    • 异步操作: 所有网络请求和主要的探索过程都是异步的,确保用户界面保持响应。
    • 轻量级探测: 网络探测使用 HEAD 请求而非 GET,节省了带宽并提高了速度。
  • 自定义样式: 脚本会为小工具注入其自有的 CSS,并动态获取和嵌入 "Monaspace Neon" 字体,以提供一致且精美的外观,同时谨慎处理相对字体路径以符合内容安全策略(CSP)。

架构与核心函数

该脚本被封装在一个立即调用函数表达式(IIFE)中,以避免污染全局命名空间。其结构逻辑清晰且模块化。

  • siteSpecificRules(对象): 一个设置映射表,其键是主机名称,值是函数。每个函数接收当前的 URL 对象作为参数,并返回一个包含该站点已知高质量订阅源 URL 的 Map。这是第一个也是最精确的探索方法。

  • discoverFeeds(initialDocument, url)(异步函数): 这是核心的协调函数。它按顺序执行三个探索阶段:

    1. 应用特定站点规则。如果规则匹配并找到订阅源,可能会提前返回。
    2. 调用内部函数 findFeedsInNode 以扫描 DOM。
    3. 使用 gmFetch 启动网络探测。 它会将所有阶段的结果汇总成一个单一列表,并确保没有重复项。
  • gmFetch(url, options)(函数): 一个基于 Promise 的、对 Greasemonkey API 函数 GM_xmlhttpRequest 的封装。这对于执行跨域网络请求至关重要,这些请求在网络探测和获取外部字体样式表时是必需的。

  • UI 管理: 一组变量和函数专门用于创建、设置样式和管理 UI 小工具。

    • injectCSS():将小工具的样式注入文件的 <head> 中。
    • 元素创建(widget, content, listEl):构建 UI 所需的 DOM 元素。
    • renderResults():将发现的订阅源列表填充到 UI 中。
    • 事件处理器(widget.addEventListener, handleClickOutside):管理小工具的展开/折叠行为。
  • SPA 导航处理:

    • patchHistoryMethod():一个辅助函数,用于包装原生的 history.pushStatehistory.replaceState 方法。当网站调用这些方法时,包装函数会派发一个自定义事件。
    • popstatehashchangepushstatereplacestate 的事件监听器会触发 handleUrlChange,后者会重置脚本的状态并启动新的探索过程。

脚本权限

  • GM_xmlhttpRequest: 此权限是执行跨域网络请求所必需的。它用于以下两个目的:
    1. 网络探测阶段,该阶段向潜在的订阅源 URL 发送 HEAD 请求。
    2. 从 CDN 获取外部字体样式表(Monaspace Neon)。
  • @match *://*/*: 该脚本被配置为在所有 HTTP 和 HTTPS 网站上运行。这种广泛的匹配模式是必要的,以便使其成为一个通用目的的订阅源寻找器,能够在用户访问的任何网站上发现订阅源。