文件 v0.3.2

頁面載入

頁面何時算載入完成、捲動迴圈如何擷取動態載入的內容,以及何時停止。

等待穩定

萃取前頁面分兩段等待穩定:

  1. WaitDOMStable,視窗為 min(400ms, IdleWait)、變動比例門檻 0.01,整體上限 IdleWait
  2. SettleJS,上限 IdleWait;預設的 listener.js 在一次 requestIdleCallback(逾時 250ms)或 1 秒後結束,以先到者為準

每輪同意橫幅處理後、每次捲動後都會再等待一次。這裡的逾時不算錯誤:萃取以當下 DOM 的內容繼續。

捲動迴圈

同意橫幅處理完後,第一份快照是整頁 HTML。接著最多執行 ScrollCount 次:

步驟 細節
檢查 文件高度不再超過視窗高度加 4px 時停止
等待 150ms 加 0–300ms 隨機抖動;context 結束時停止
捲動 以 requestAnimationFrame 在 300ms 內平滑捲到底
等待穩定 同上兩段
快照 新 HTML 與前一份完全相同時停止

ScrollCount 預設 3;傳負值完全不捲動,只留第一份快照。

為何要多份快照

無限捲動的動態牆與延遲載入的文章會在捲動時替換或追加內容。每份快照記錄一個狀態,輸出階段再合併:TypeHTML 合併各份的 <body> 子節點,TypeMarkdown 與 TypeJSON 對每份快照各跑一次 readability 再串接內容。快照重疊造成的重複段落之後會被移除。見 輸出格式。

Viewport

頁面使用 Option.Viewport,預設 1280 × 960,DeviceScaleFactor 為 0 時視為 1。viewport 越高,每份快照載入的內容越多。

EN