From 13ec0bdf8fbf33edac47e9e7d49cc58267f07d46 Mon Sep 17 00:00:00 2001 From: Gloridust Date: Sun, 14 Jun 2026 17:08:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(desktop):=20=E8=BE=93=E5=85=A5=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E5=88=87=E6=8D=A2=E6=94=B9=E4=B8=BA=E6=95=B4=E9=A1=B5?= =?UTF-8?q?=E9=87=8D=E8=BD=BD=EF=BC=8C=E4=BF=AE=E5=8D=A1=E6=AD=BB=20+=20?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E4=B8=8D=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 切换模式时原先 bump vncNonce 在页内重挂 iframe,会让新旧两条 VNC ws 短暂并存, 概率性把实例 Xvnc 卡死(需重启容器恢复、面板重启无效),且新连接常读不到新 enable_ime (仍是英文)。改为 window.location.reload():先卸载旧页彻底关旧 ws,再以新模式干净重连, 正是用户实测唯一可靠的方式。 Co-Authored-By: Claude Opus 4.8 --- panel/web/src/pages/Desktop.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/panel/web/src/pages/Desktop.tsx b/panel/web/src/pages/Desktop.tsx index e661e33..f4fd27d 100644 --- a/panel/web/src/pages/Desktop.tsx +++ b/panel/web/src/pages/Desktop.tsx @@ -125,17 +125,17 @@ export default function InstanceView({ onOpenMenu }: { onOpenMenu: () => void }) } }); const setMode = (m: 'forward' | 'seamless') => { - setInputMode(m); try { window.localStorage.setItem('woc_input_mode', m); - // 同步写好 enable_ime,供下面重挂的 iframe 里 noVNC 连接时读取 + // 同步写好 enable_ime,重载后新页面的 noVNC 连接时即读到 window.localStorage.setItem('enable_ime', m === 'seamless' ? 'true' : 'false'); } catch { /* 隐私模式禁用 localStorage:忽略 */ } - // 关键:重挂 iframe 让 noVNC 重新读取 enable_ime。否则当前已连接的会话仍是旧模式, - // 表现为"刚切到无感还是打出英文,要换页再回来才行"。 - setVncNonce((n) => n + 1); + // 整页重载切换:先卸载旧页面(彻底关闭旧 VNC ws),再以新 enable_ime 干净重连。 + // 不能用页内 bump vncNonce 重挂 iframe——那会让新旧两条 ws 短暂并存,概率性把实例的 Xvnc 卡死 + //(需重启容器才恢复、面板重启无效),且新连接常读不到新模式(仍是英文)。整页重载是实测唯一可靠的方式。 + window.location.reload(); }; const [imeText, setImeText] = useState(''); const [imeSending, setImeSending] = useState(false);