From 808e9740f869829f4df04d6cfe3b91500e18988d Mon Sep 17 00:00:00 2001 From: kdletters Date: Sat, 20 Jun 2026 12:57:37 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=81=E5=AE=9A=E6=A1=8C=E9=9D=A2=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E4=B8=8D=E5=8F=AF=E7=94=A8=E5=93=8D=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 桌面 WebView 刷新主窗口缺失转为稳定 host_error 桌面 WebView 刷新失败转为稳定不可用响应 桌面刷新单测覆盖不可用响应 code 和 message 桌面壳配置检查反查刷新不可用边界 --- apps/desktop-shell/scripts/check-config.mjs | 3 ++ .../src-tauri/src/host_bridge/navigation.rs | 28 +++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/apps/desktop-shell/scripts/check-config.mjs b/apps/desktop-shell/scripts/check-config.mjs index a9bda0f42..5c98a742e 100644 --- a/apps/desktop-shell/scripts/check-config.mjs +++ b/apps/desktop-shell/scripts/check-config.mjs @@ -1897,7 +1897,10 @@ for (const snippet of [ '"native page unavailable"', 'native_page_unavailable_response_is_stable', 'reload_desktop_host_bridge_webview', + 'webview_reload_unavailable_response', 'window.reload()', + '"webview reload unavailable"', + 'webview_reload_unavailable_response_is_stable', ]) { if (!desktopHostBridgeNavigationSource.includes(snippet)) { throw new Error(`desktop shell navigation module is missing ${snippet}`); diff --git a/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs b/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs index bfdc5c52c..24d536b1e 100644 --- a/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs +++ b/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs @@ -187,8 +187,32 @@ pub(crate) fn reload_desktop_host_bridge_webview( match app.get_webview_window("main") { Some(window) => match window.reload() { Ok(()) => ok(request.id.clone(), json!(true)), - Err(error) => failed(request.id.clone(), "host_error", error.to_string()), + Err(_) => webview_reload_unavailable_response(request), }, - None => failed(request.id.clone(), "host_error", "main window not found"), + None => webview_reload_unavailable_response(request), + } +} + +fn webview_reload_unavailable_response(request: &HostBridgeRequest) -> HostBridgeResponse { + failed( + request.id.clone(), + "host_error", + "webview reload unavailable", + ) +} + +#[cfg(test)] +mod reload_tests { + use super::*; + use crate::host_bridge::protocol::request; + + #[test] + fn webview_reload_unavailable_response_is_stable() { + let response = webview_reload_unavailable_response(&request("app.reloadWebView")); + + assert!(!response.ok); + let error = response.error.expect("webview reload error"); + assert_eq!(error.code, "host_error"); + assert_eq!(error.message, "webview reload unavailable"); } }