前言¶
DeepSeek Harness 桌面版在查看长对话、代码或复杂界面时,需要频繁调整查看比例。浏览器自带缩放,但桌面应用窗口没有类似快捷方式。如果手动缩放,页面布局和坐标计算会错位;如果依赖系统缩放,则无法精细控制档位。dsh-page-zoom 插件用浏览器式的整页缩放方案,解决了这个问题。
是什么¶
dsh-page-zoom 是一个客户端插件,给 DeepSeek Harness 桌面版(@deepseek-ai/dsh-desktop)使用。它通过注入 CSS zoom 和测量/坐标校正,让整个界面随缩放倍数重排,而不是简单的位图放大。插件维护者 qydxd1,目前有 0 个星标。它通过 window.dshDesktop 判断是否在桌面窗口中生效,网页版不受影响。
核心功能¶
- 按住 Ctrl 滚动滚轮(触控板双指捏合同理),按浏览器常用档位放大/缩小
- 按 Ctrl + 0 回到 100%
- 顶部短暂显示百分比胶囊(
−/ 百分比 /+/↺),1.8 秒后自动消失 - 缩放倍数存在
localStorage的dsh.page-zoom.v1,下次启动自动恢复 - 按档位放大/缩小:50% 67% 75% 80% 90% 100% 110% 125% 150% 175% 200% 250% 300%
- 支持键盘快捷键 Ctrl + Shift + = / - 放大/缩小(滚轮不可用时)
- 同时校正测量面与指针坐标,确保浮层、拖拽、菜单等位置正确
安装与启用¶
dsh-page-zoom 是一个 bundle(客户端插件),需要安装到 Harness 的 profile 中。
plugin_manager → action: install_bundle → target: <这个目录的绝对路径>
安装完成后,在「插件」列表中可以看到 Page zoom / 页面缩放。启用后,在桌面窗口顶部按 Ctrl + 滚轮即可看到百分比胶囊。
注意事项:
- 需要桌面版(
@deepseek-ai/dsh-desktop),开发时验证过 0.2.1-rc.2 - 插件通过
dsh.client.inject依赖@deepseek-ai/dsh-client-ui-layout,这是 Harness 自带的包 - 从本机目录 link 安装时,不要删除这个目录,否则插件会断开;想彻底移除,请在插件管理中禁用并移除
dsh-page-zoom
实现原理¶
插件没有在窗口层面做缩放,因为桌面壳(resources/app.asar 里的 lib/main.js)是只读打包产物,没有暴露缩放接口(既没有 webContents.setZoomFactor,也没有 IPC 通道)。因此缩放在页面层面实现:
- 给
<body>设 CSSzoom,让布局按缩放后的 CSS 尺寸重排,文字清晰 - 把
<html>和<body>的宽高设成「视口 ÷ 缩放倍数」,保证html → body → #root → 框架这条高度链在放大后仍然填满窗口 - 给
<body>加contain: layout,让position: fixed的浮层(弹窗、toast、菜单)锚定到 body,随页面一起缩放 - 校正测量面:
getBoundingClientRect()/getClientRects()(含Range)、innerWidth/innerHeight和documentElement.clientWidth/Height都除以倍数,避免列宽、浮层定位和拖拽错位 - 校正指针坐标:
MouseEvent的clientX/clientY、pageX/pageY、offsetX/offsetY、x/y、movementX/movementY除以倍数;document.elementFromPoint()/elementsFromPoint()在内部先乘回倍数再问浏览器,调用方照旧传布局像素 WheelEvent的deltaX/deltaY不换算——它描述滚轮走了多远,不是文档滚了多远,保持浏览器口径- 校正
visualViewport的width/height/offsetLeft/offsetTop/pageLeft/pageTop,避免底部工作台(dsh-better-sidebar)高度错位 - 视口单位(
vh/dvh/vw)在zoom子树里仍然按真实窗口解析,插件注入一小段样式把它们重新指向布局视口(--page-zoom-vh每次缩放时由插件写入),确保「按视口高度定尺寸」的盒子不会被放大 - 对原生视图(设置 → 账号 → 「查询用量」/「充值」打开的 DeepSeek 平台页)不做除法校正,让占位元素上的
ResizeObserver触发重报,保证原生视图盖在正确的位置和大小上
测试与调试¶
插件提供自检页和 CDP 回归脚本:
- 自检页:
test/selftest.html,加载真实client.js,28 条断言覆盖尺寸链、滚动条、测量面、指针坐标、elementFromPoint、visualViewport、vh宿主、原生视图 bounds、滚轮灵敏度、原生占位元素重报、复位与卸载还原 - CDP 回归:
tools/cdp-zoom-hit.mjs,需要占一个本地调试端口,某些环境会拒绝bind()(WSAEACCES),那时使用自检页即可
适用场景与注意¶
- 适合需要频繁查看大段对话、代码或复杂界面的开发者
- 插件以当前 dsh 进程权限运行,安装前建议检查源码与许可证(MIT)
- 缩放只作用于桌面窗口,网页版由浏览器原生缩放处理
- 在 win32 下,桌面窗口使用自绘标题栏,缩放时标题栏内边距会跟着变化(40px),这是正常表现
- 插件会临时改写
Element/Range/MouseEvent/VisualViewport的原型 getter,卸载时全部还原;如果其他插件硬编码了vh/vw尺寸或不经过getBoundingClientRect()的定位计算,需要自行适配
结尾¶
dsh-page-zoom 提供了一套浏览器式的整页缩放方案,让 DeepSeek Harness 桌面版能够按档位放大/缩小整个界面,同时保持布局和交互的正确性。适合需要精细控制查看比例的开发者使用。插件目录页:https://www.skillhub.cn/plugins/qydxd1/dsh-page-zoom;GitHub:https://github.com/qydxd1/dsh-page-zoom