Greasy Fork is available in English.
检测当前网站的feed,方便订阅RSS内容。
Feed Finder 是一个 Violentmonkey 用户脚本,旨在自动侦测并显示当前网页上的 RSS、Atom 或 JSON 订阅源。它通过一个多阶段的探索流程运作,包含特定站点规则、DOM 扫描及网络探测。找到的订阅源会显示在一个方便且不干扰的浮动小工具中,该小工具会显示可用的订阅源数量,并可展开以呈现包含其标题和网址的可点击列表。此脚本针对现代网页浏览进行了优化,支持单页应用程序(SPA),并采用高效的防抖动执行机制以最小化对性能的影响。
多方面探索机制: 该脚本采用一个有优先顺序的三阶段方法,以最大化找到订阅源的机会。
github.com、medium.com)的硬编码规则。这些规则根据 URL 结构提供高精准度的订阅源链接,例如 GitHub 存储库的 commits 或 releases 链接。<link> 和 <a> 元素。它根据 type 属性(如 application/rss+xml)、rel="alternate" 以及包含 rss、feed 等关键字或 .xml 等扩展名的 href 属性来识别它们。/feed、/rss.xml)。它使用高效的 HEAD 请求来检查响应的 Content-Type 标头,以确认该 URL 是否指向一个有效的订阅源,而无需下载整个文件。动态且不干扰的 UI:
单页应用程序(SPA)支持: 该脚本能主动监控在现代 Web 应用中常见的、无需完全重新加载页面的 URL 变化。通过修补(patch)history.pushState 和 history.replaceState 并监听导航事件(popstate、hashchange),它能在页内导航时自动重新执行探索过程。
高效率与优化设计:
HEAD 请求而非 GET,节省了带宽并提高了速度。自定义样式: 脚本会为小工具注入其自有的 CSS,并动态获取和嵌入 "Monaspace Neon" 字体,以提供一致且精美的外观,同时谨慎处理相对字体路径以符合内容安全策略(CSP)。
该脚本被封装在一个立即调用函数表达式(IIFE)中,以避免污染全局命名空间。其结构逻辑清晰且模块化。
siteSpecificRules(对象): 一个设置映射表,其键是主机名称,值是函数。每个函数接收当前的 URL 对象作为参数,并返回一个包含该站点已知高质量订阅源 URL 的 Map。这是第一个也是最精确的探索方法。
discoverFeeds(initialDocument, url)(异步函数): 这是核心的协调函数。它按顺序执行三个探索阶段:
findFeedsInNode 以扫描 DOM。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.pushState 和 history.replaceState 方法。当网站调用这些方法时,包装函数会派发一个自定义事件。popstate、hashchange、pushstate 和 replacestate 的事件监听器会触发 handleUrlChange,后者会重置脚本的状态并启动新的探索过程。GM_xmlhttpRequest: 此权限是执行跨域网络请求所必需的。它用于以下两个目的:
HEAD 请求。Monaspace Neon)。@match *://*/*: 该脚本被配置为在所有 HTTP 和 HTTPS 网站上运行。这种广泛的匹配模式是必要的,以便使其成为一个通用目的的订阅源寻找器,能够在用户访问的任何网站上发现订阅源。