From 9b73edfbf9b7d823dcb0da4802ffd989e01431d2 Mon Sep 17 00:00:00 2001 From: kdletters Date: Sat, 20 Jun 2026 12:49:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=81=E5=AE=9A=E6=A1=8C=E9=9D=A2=E5=A4=96?= =?UTF-8?q?=E9=93=BE=E6=89=93=E5=BC=80=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 | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/desktop-shell/scripts/check-config.mjs b/apps/desktop-shell/scripts/check-config.mjs index cf10f570d..bdd7db4ec 100644 --- a/apps/desktop-shell/scripts/check-config.mjs +++ b/apps/desktop-shell/scripts/check-config.mjs @@ -1881,10 +1881,13 @@ if ( } for (const snippet of [ 'open_desktop_host_bridge_external_url', + 'external_url_unavailable_response', 'desktop_external_url_from_request', 'normalize_external_url', 'open_normalized_desktop_external_url(app, url)', 'desktop_external_url_request_accepts_only_safe_system_protocols', + '"external url unavailable"', + 'external_url_unavailable_response_is_stable', 'open_desktop_host_bridge_native_page', 'desktop_native_page_url_from_request', 'normalize_native_page_url', 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 cc4ee009a..2472d1048 100644 --- a/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs +++ b/apps/desktop-shell/src-tauri/src/host_bridge/navigation.rs @@ -48,10 +48,14 @@ pub(crate) fn open_desktop_host_bridge_external_url( match open_normalized_desktop_external_url(app, url) { Ok(()) => ok(request.id.clone(), json!(true)), - Err(error) => failed(request.id.clone(), "host_error", error.to_string()), + Err(_) => external_url_unavailable_response(request), } } +fn external_url_unavailable_response(request: &HostBridgeRequest) -> HostBridgeResponse { + failed(request.id.clone(), "host_error", "external url unavailable") +} + pub(crate) fn open_desktop_host_bridge_native_page( app: &tauri::AppHandle, request: &HostBridgeRequest, @@ -113,6 +117,16 @@ mod tests { } } + #[test] + fn external_url_unavailable_response_is_stable() { + let response = external_url_unavailable_response(&request("app.openExternalUrl")); + + assert!(!response.ok); + let error = response.error.expect("external url error"); + assert_eq!(error.code, "host_error"); + assert_eq!(error.message, "external url unavailable"); + } + #[test] fn desktop_native_page_request_accepts_only_same_origin_h5_routes() { let route = desktop_native_page_url_from_request(&request_with_url(