From d13dc3e3f5f7b2a2f91e7bfe8e16b466fe03dc5e Mon Sep 17 00:00:00 2001 From: kdletters Date: Sat, 20 Jun 2026 12:53:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=81=E5=AE=9A=E6=A1=8C=E9=9D=A2=E5=90=8C?= =?UTF-8?q?=E6=BA=90=E5=AF=BC=E8=88=AA=E4=B8=8D=E5=8F=AF=E7=94=A8=E5=93=8D?= =?UTF-8?q?=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 桌面同源页面导航主窗口缺失转为稳定 host_error 桌面同源页面导航失败转为稳定不可用响应 桌面同源导航单测覆盖不可用响应 code 和 message 桌面壳配置检查反查同源导航不可用边界 --- apps/desktop-shell/scripts/check-config.mjs | 3 +++ .../src-tauri/src/host_bridge/navigation.rs | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/apps/desktop-shell/scripts/check-config.mjs b/apps/desktop-shell/scripts/check-config.mjs index bdd7db4ec..a9bda0f42 100644 --- a/apps/desktop-shell/scripts/check-config.mjs +++ b/apps/desktop-shell/scripts/check-config.mjs @@ -1889,10 +1889,13 @@ for (const snippet of [ '"external url unavailable"', 'external_url_unavailable_response_is_stable', 'open_desktop_host_bridge_native_page', + 'native_page_unavailable_response', 'desktop_native_page_url_from_request', 'normalize_native_page_url', 'window.navigate(url)', 'desktop_native_page_request_accepts_only_same_origin_h5_routes', + '"native page unavailable"', + 'native_page_unavailable_response_is_stable', 'reload_desktop_host_bridge_webview', 'window.reload()', ]) { 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 2472d1048..bfdc5c52c 100644 --- a/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs +++ b/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs @@ -68,12 +68,16 @@ pub(crate) fn open_desktop_host_bridge_native_page( match app.get_webview_window("main") { Some(window) => match window.navigate(url) { Ok(()) => ok(request.id.clone(), json!(true)), - Err(error) => failed(request.id.clone(), "host_error", error.to_string()), + Err(_) => native_page_unavailable_response(request), }, - None => failed(request.id.clone(), "host_error", "main window not found"), + None => native_page_unavailable_response(request), } } +fn native_page_unavailable_response(request: &HostBridgeRequest) -> HostBridgeResponse { + failed(request.id.clone(), "host_error", "native page unavailable") +} + #[cfg(test)] mod tests { use super::*; @@ -164,6 +168,16 @@ mod tests { ); } } + + #[test] + fn native_page_unavailable_response_is_stable() { + let response = native_page_unavailable_response(&request("navigation.openNativePage")); + + assert!(!response.ok); + let error = response.error.expect("native page error"); + assert_eq!(error.code, "host_error"); + assert_eq!(error.message, "native page unavailable"); + } } pub(crate) fn reload_desktop_host_bridge_webview(