From c71edd2486604b92f180e87f0403158f15344084 Mon Sep 17 00:00:00 2001 From: yanzhaohui1999 <64406210+yanzhaohui1999@users.noreply.github.com> Date: Sat, 3 Oct 2026 15:29:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(mobile):=20=E6=96=87=E4=BB=B6=E5=AE=88?= =?UTF-8?q?=E5=8D=AB=E6=94=B9=E5=88=B0=E5=86=92=E6=B3=A1=E9=98=B6=E6=AE=B5?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=86=8D=E5=90=9E=E6=8E=89=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E8=87=AA=E5=B7=B1=E7=9A=84=E9=A2=84=E8=A7=88=E7=82=B9=E5=87=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 捕获阶段 + stopImmediatePropagation() 会在 dsh-web 自己的处理器之前把点击吃掉, 于是所有「文案像路径」的文件链接都只剩提示、右栏预览打不开(而文案不含斜杠的同类 链接正常)。 改为冒泡阶段注册 + event.defaultPrevented 早退:应用能处理(预览优先)时让它处理, 只有应用没管、真会去调桌面端 open 时才弹提示兜底。复制按钮注入保持不变。 Refs #152 --- client/client.js | 6 +++--- client/mobile/fileGuard.ts | 22 +++++++++++++++------- test/file-guard.test.js | 17 ++++++++++++++++- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/client/client.js b/client/client.js index d614db0..3763b8b 100644 --- a/client/client.js +++ b/client/client.js @@ -482,16 +482,16 @@ function startFileGuard(readFile) { }, 2600); }; const onClick = (event) => { + if (event.defaultPrevented) return; const target = event.target; if (target === null) return; const el = target.closest("button, a"); if (el === null) return; if (!looksLikeFilePath(el.textContent)) return; event.preventDefault(); - event.stopImmediatePropagation(); showToast(GUARD_MSG); }; - document.addEventListener("click", onClick, true); + document.addEventListener("click", onClick); const injectCopyButtons = () => { const links = document.querySelectorAll("button, a"); links.forEach((el) => { @@ -562,7 +562,7 @@ function startFileGuard(readFile) { }; const disconnectWs = hideWsEntries(); return () => { - document.removeEventListener("click", onClick, true); + document.removeEventListener("click", onClick); copyObserver.disconnect(); disconnectWs(); if (toastTimer !== null) window.clearTimeout(toastTimer); diff --git a/client/mobile/fileGuard.ts b/client/mobile/fileGuard.ts index dc2adbd..99e41b1 100644 --- a/client/mobile/fileGuard.ts +++ b/client/mobile/fileGuard.ts @@ -1,13 +1,17 @@ -// 移动端文件守卫(issue #17):dsh-web 在手机上点「文件链接」会触发桌面端 +// 移动端文件守卫(issue #17,issue #152 修正):dsh-web 在手机上点「文件链接」会触发桌面端 // workspaces.openPath(open ),既打不开(文件在电脑上),又会抛 // "path open failed". 这里做两件事: -// 1) 捕获阶段拦截这类激活(点击 / 键盘),改为弹一个提示; +// 1) 应用自己没处理这类激活时(点击 / 键盘)弹一个提示兜底; // 2) 在每个文件链接旁注入一个「复制」按钮,点它经主机 RPC 读文件正文再写剪贴板。 // 另外隐藏「添加工作区」入口(手机上配工作区无意义)。 // 移植自 dsh-web-mobile(MIT)。 // // 识别方式:不依赖 dsh-web 的 hash 类名(每次构建都变),只认「文本像文件路径的 //