前言¶
在 DeepSeek Harness(DSH)裏瀏覽插件時,列表和詳情往往共用同一個滾動容器。點開某條插件後,列表 DOM 被替換,容器高度縮回一屏,瀏覽器會把 scrollTop 鉗到 0;點「返回插件」時,內核並沒有把之前的滾動偏移寫回去,於是一次次回到列表頂部。插件一多,想逐個看簡介就會不斷重複往下滾。下面介紹社區插件 dsh-plugin-scroll-memory(維護者 chenyidong,分類:記憶),專門處理「列表 ↔ 詳情」這一跳時的位置恢復。
這是什麼¶
dsh-plugin-scroll-memory 是純客戶端 DSH 插件(約 100 行),在 Web / 桌面端的插件管理頁生效:列表可見時持續記錄容器的 scrollTop,從詳情回到列表時把記錄值寫回,避免每次都從頂部重來。它不註冊 slot、不調用 host 服務、不修改內核 app.asar,卸載後不留殘留。當前 package 版本爲 0.1.0,許可證 MIT,引擎要求 dsh 爲 >=0.2.0-rc.1 <0.3.0-0。
問題從哪來¶
插件頁把列表和詳情渲染在同一個滾動容器裏。進入詳情時列表被整體替換,容器高度塌回一屏,scrollTop 被瀏覽器夾到 0;返回列表時沒有邏輯恢復偏移,因此默認總是頂部。在插件數量較多、需要連續瀏覽條目時,這一點尤其礙事。
核心功能與覆蓋範圍¶
經過上面的步驟理解機制後,可以這樣概括插件行爲:
- 列表態:容器處於列表時,持續記錄
scrollTop。 - 回到列表:詳情節點消失(剛返回列表)時,在下一幀寫回記錄值;若列表高度尚未撐開,再補一幀重試。
- 詳情內滾動:在詳情裏繼續往下滾不會覆蓋已記憶的列表位置;例如在詳情底部再返回,仍會回到進入詳情前那一行。
詳情態依靠 DSH 內核已有的 DOM 標記識別,三種詳情頁均有效:
| 標記 | 對應頁面 |
|---|---|
[data-plugin-detail] |
組合包詳情 |
[data-plugin-item-detail] |
官方插件條目詳情 |
[data-market-detail] |
「發現」市場條目詳情 |
實現上一律讀實時 DOM,而不是緩存 UI 狀態。切到詳情時瀏覽器會把 scrollTop 夾到 0 並觸發 scroll 事件,但那一刻詳情節點已存在,該僞事件不會被誤記成「列表在頂部」。
安裝與啓用¶
插件以當前 dsh 進程的權限運行;安裝前建議瀏覽 GitHub 倉庫 源碼並確認 MIT 許可證與行爲是否符合預期。
先選定要使用的 profile,再執行官方 README 中的安裝命令:
dsh plugin --profile <profile> add github:chenyidong/dsh-plugin-scroll-memory
安裝完成後重啓該 profile,客戶端配置爲 platform: web、immediately: true,裝好後在插件管理頁即可生效。
本地開發時可將源碼目錄 link 到 profile(同樣來自 README):
dsh plugin --profile <profile> add link:/path/to/dsh-plugin-scroll-memory
典型用法¶
日常使用不需要額外配置項:在插件列表滾到中間 → 點開任意插件詳情 → 點「返回插件」→ 列表應停在原處。
倉庫提供基於假 DOM 的測試,可在插件目錄下自行驗證三種情形:
node test.cjs
或用 npm script:
npm test
覆蓋:列表滾動後進詳情再返回;詳情內滾動不污染列表位置;列表本在頂部時返回仍在頂部。
適用場景與限制¶
適合:經常在 DSH Web 或桌面端插件頁連續查看多條插件/市場條目,且主要痛點是「詳情返回列表跳頂」的開發者。
不適用或需注意:
- 終端 TUI 插件頁不在覆蓋範圍內。
- 依賴內核的
data-plugin-body、data-plugin-detail等標記;宿主大版本調整 DOM 時,插件可能需要跟隨更新。 - 離開插件頁再進入不會保留位置(容器會重新掛載);本插件只解決同一插件頁內「列表 ↔ 詳情」往返。
- 社區目錄 skillhub.cn 插件頁 爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;安裝來源以 GitHub README 命令爲準。
結尾¶
dsh-plugin-scroll-memory 用最小的客戶端邏輯補上插件管理頁缺失的滾動恢復,讓「逐個看插件」不再伴隨重複的滾輪操作。進一步瞭解可訪問目錄頁 skillhub.cn/plugins/chenyidong/dsh-plugin-scroll-memory 與源碼 github.com/chenyidong/dsh-plugin-scroll-memory。