前言¶
DeepSeek Harness (DSH) 採用「一切皆插件」的架構。在應用啓動階段,爲了提供更完整的啓動體驗或品牌展示,通常需要自定義啓動畫面。dsh-splash-screen 是一個純插件實現的開屏動畫,提供全屏啓動動畫,支持跳過,並可在側欄「插件」頁開關。
核心功能¶
該插件主要包含以下特性:
- 全屏啓動動畫:提供全屏的啓動展示,覆蓋默認的啓動殼。
- 可跳過:支持通過點擊任意處、按鍵、觸屏、滾輪或點擊右下角 SKIP 按鈕跳過。
- 純插件實現:不依賴應用本體修改,通過插件機制集成。
- 側欄開關:可在側欄「插件」頁直接控制插件的啓用與禁用。
- 音效處理:音效默認關閉,採用運行時合成(不依賴外部音頻文件),並支持在右下角 SOUND 按鈕開啓。
- 無障礙支持:包含
role="progressbar"與aria-valuenow,狀態變化支持aria-live播報,並尊重prefers-reduced-motion偏好設置。 - 兩半結構:採用 Node 半和 Client 半的結構,通過注入行進行通信。
- 會話控制:同頁面會話內只播一次。
安裝¶
安裝前請確保已安裝 DSH(桌面版或瀏覽器版)。dsh plugin 會通過 pnpm 將倉庫安裝到指定 profile。
安裝命令¶
桌面版:
dsh plugin --profile desktop add "git+https://github.com/52baihehhh-ai/dsh-splash-screen.git"
瀏覽器版:
dsh plugin --profile web add "git+https://github.com/52baihehhh-ai/dsh-splash-screen.git"
安裝完成後,桌面端需要重啓一次應用。這是因爲 node 半的注入行是在宿主啓動時收集並下發的,重啓後注入行纔會生效。
結構說明¶
該插件採用兩半結構實現,確保在宿主加載機制下正常工作。
Node 半:封面與注入¶
Node 半負責在應用啓動早期進行覆蓋,防止默認啓動殼閃現。它使用官方的結構化注入行向 index 注入:
- 樣式注入:同底色的封面樣式,覆蓋默認啓動畫面。
- 腳本注入:立刻鋪出封面節點(底色與開屏舞臺一致),並負責在 Client 半掛載或超時後移除自身。
Client 半:動畫本體¶
Client 半負責具體的動畫邏輯,通過懶加載 CJS 模塊加載。它將自己掛載到 shell.overlay 槽位,使用 position: fixed 鋪滿屏幕。樣式注入使用單個 <style> 標籤,並使用 sp- 前綴類名以避免與宿主界面衝突。
使用方法¶
跳過動畫¶
在動畫播放期間,可以通過以下任意方式跳過:
* 鼠標點擊任意處
* 按任意鍵
* 觸屏操作
* 滾動滾輪
* 點擊右下角的 SKIP 按鈕
音效控制¶
音效默認關閉。點擊右下角的 SOUND 按鈕可開啓,偏好設置會保存在 localStorage 中。音效爲運行時合成,不受瀏覽器自動播放策略影響。
視覺預覽¶
在本地開發或驗證效果時,無需運行 DSH。用瀏覽器直接打開倉庫裏的 preview/index.html 即可查看獨立效果。
已知邊界與注意事項¶
- 無「應用啓動即顯示」:插件無法覆蓋宿主自帶的
[data-dsh-boot]啓動殼。它覆蓋的是「窗口出現 → 界面掛載 → 動畫結束」這一段。 - 注入行生效時機:新增或修改注入行(如修改
dsh.profile.bundles)後,桌面端必須重啓應用才能生效。 - 瀏覽器端刷新:對於瀏覽器版 DSH,刷新頁面即可使注入行和動畫生效。
- 貼圖處理:插件貼圖(如立繪)不內聯成 data URI,以避免撐爆注入腳本或阻塞主線程。
開發與定製¶
本地開發¶
無運行時依賴,需要 Node ≥ 20.11。源文件位於 src/splash.js,構建產物爲 client.js 和 index.js。
node scripts/build.mjs # 構建 client.js + index.js
node scripts/build.mjs --check # 只比對不寫盤
替換立繪¶
如需替換立繪,將圖片重命名爲 art.webp 並保持文件名不變即可。插件運行時會按文件名由宿主路由按需加載,不會將圖片內聯成 data URI。
許可證¶
MIT License。