环境
与 #122「移动端样式误隐藏宿主右侧栏展开按钮」相同:DSH 0.1.5-rc.1 + dsh-pocket 2.10.4 / 2.10.6 / main HEAD ffe894e8(三份代码逐字节一致,均有此表现),视口 390×844。
现象
手机端点击聊天里的文件路径,只弹出 toast「手机上无法直接打开电脑上的文件」,原生右侧栏不打开。
原因分析(推测)
client/mobile/fileGuard.ts:105-115(main 同):
const onClick = (event: MouseEvent): void => {
const target = event.target as HTMLElement | null
if (target === null) return
const el = target.closest('button, a') as HTMLElement | null
if (el === null) return
if (!looksLikeFilePath(el.textContent)) return // ← 只看文案像不像路径
event.preventDefault()
event.stopImmediatePropagation()
showToast(GUARD_MSG)
}
document.addEventListener('click', onClick, true) // ← 捕获阶段
这套守卫是按旧行为写的(同文件顶部注释原文:「dsh-web 在手机上点『文件链接』会触发桌面端 workspaces.openPath(open <path>),既打不开(文件在电脑上),又会抛 "path open failed"」)。但 DSH 0.1.5 起,聊天里的文件打开改走 ctx.sidebarRight.openResource(...)——直接打开原生右侧栏(窄屏自动全屏),不再调用 workspaces.openPath,那条"会报 path open failed"的前提看起来已经不再成立。
而守卫的判定是「文本像文件路径的 button/a」,所以 0.1.5 的文件链接也会被一并拦下。
复现证据
移动层生效时点击文件链接 .sidebar-route-demo/takeover-probe.md:只出现 toast,右侧栏不打开。
DOM 实测:[data-shell-overlay] 父元素的 data-rightbar-collapsed 仍为 true,右侧栏面板 rect 停在 x=390(视口外)。
反证:换 ?dsh-layout=desktop 跳过移动层后,点同一条链接,面板移到 x=0 铺满 390×844 视口,原生右侧栏正常打开并渲染文件正文,无 toast。
一点建议
供参考:
- 或许可以只拦真正会调
workspaces.openPath 的旧路径,对 0.1.5 的 dsh-resource:// 资源链接放行(判据看链接地址 / 宿主标记,可能比按按钮文案正则更准)。
- 旁挂的「复制」按钮挺好用的,保留它应该没问题;只是它作为附加能力,可能不必
preventDefault 掉打开动作。
附加说明
本条与 #122 叠加后,手机端进入官方右侧栏的两条路径都会受影响:header 里的手动展开按钮被 display: none 隐藏,点文件链接又被守卫拦下。修掉任意一条都能恢复可用,如果方便的话可以一并看一下。
环境
与 #122「移动端样式误隐藏宿主右侧栏展开按钮」相同:DSH
0.1.5-rc.1+ dsh-pocket 2.10.4 / 2.10.6 / main HEADffe894e8(三份代码逐字节一致,均有此表现),视口 390×844。现象
手机端点击聊天里的文件路径,只弹出 toast「手机上无法直接打开电脑上的文件」,原生右侧栏不打开。
原因分析(推测)
client/mobile/fileGuard.ts:105-115(main 同):这套守卫是按旧行为写的(同文件顶部注释原文:「dsh-web 在手机上点『文件链接』会触发桌面端
workspaces.openPath(open <path>),既打不开(文件在电脑上),又会抛 "path open failed"」)。但 DSH 0.1.5 起,聊天里的文件打开改走ctx.sidebarRight.openResource(...)——直接打开原生右侧栏(窄屏自动全屏),不再调用workspaces.openPath,那条"会报 path open failed"的前提看起来已经不再成立。而守卫的判定是「文本像文件路径的
button/a」,所以 0.1.5 的文件链接也会被一并拦下。复现证据
移动层生效时点击文件链接
.sidebar-route-demo/takeover-probe.md:只出现 toast,右侧栏不打开。DOM 实测:
[data-shell-overlay]父元素的data-rightbar-collapsed仍为true,右侧栏面板 rect 停在x=390(视口外)。反证:换
?dsh-layout=desktop跳过移动层后,点同一条链接,面板移到x=0铺满 390×844 视口,原生右侧栏正常打开并渲染文件正文,无 toast。一点建议
供参考:
workspaces.openPath的旧路径,对 0.1.5 的dsh-resource://资源链接放行(判据看链接地址 / 宿主标记,可能比按按钮文案正则更准)。preventDefault掉打开动作。附加说明
本条与 #122 叠加后,手机端进入官方右侧栏的两条路径都会受影响:header 里的手动展开按钮被
display: none隐藏,点文件链接又被守卫拦下。修掉任意一条都能恢复可用,如果方便的话可以一并看一下。