RSS Feed 查找器

偵測目前網站的feed,方便訂閱RSS內容。

作者
Gholts
今日安裝
1
安裝總數
3
評價
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 網站上運行。這種廣泛的匹配模式是必要的,以便使其成為一個通用目的的訂閱源尋找器,能夠在使用者訪問的任何網站上發現訂閱源。