Greasy Fork

Greasy Fork is available in English.

RSS Feed 查找器

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

当前为 2025-10-08 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

作者
Gholts
评分
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 网站上运行。这种广泛的匹配模式是必要的,以便使其成为一个通用目的的订阅源寻找器,能够在用户访问的任何网站上发现订阅源。