fix(desktop): neue Fenster im System-Browser oeffnen
Tessera CI/CD / Lint & Type Check (push) Successful in 59s
Tessera CI/CD / Tests (push) Successful in 1m39s
Tessera CI/CD / Desktop-Pakete bauen (push) Successful in 8m42s
Tessera CI/CD / Build & Publish Images (push) Successful in 5m7s

Die Webansicht verwarf window.open und Links mit target=_blank still:
Suche-Widget und "In neuem Tab oeffnen" (XFrame, eigene Module,
Favoriten) taten im Client nichts. on_new_window reicht http/https-
Adressen an den System-Browser weiter und lehnt das neue Fenster ab;
andere Schemata werden verworfen (external_target, mit Test).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-29 10:08:41 +02:00
parent a435a30c34
commit 76a923450f
2 changed files with 47 additions and 0 deletions
+1
View File
@@ -17,6 +17,7 @@ Diese Liste beschreibt in einfachen Worten, was sich von Version zu Version an T
### Behoben
- Desktop-App: Tessera startet nicht mehr doppelt. Wird die App ein zweites Mal gestartet – etwa beim Anmelden an Windows –, holt sie nur das vorhandene Fenster nach vorne; im Infobereich erscheint nur noch ein Symbol.
- Desktop-App: Die Suche im Such-Widget und Knöpfe wie „In neuem Tab öffnen“ funktionieren jetzt auch in der Desktop-App – die Seite öffnet sich in Ihrem normalen Browser. Bisher passierte dort beim Klick nichts.
## 1.5.2 – 2026-09-28
+46
View File
@@ -694,6 +694,16 @@ fn get_client_info() -> String {
client_info_label(env!("CARGO_PKG_VERSION"), env!("APP_COMMIT"))
}
/// Ziel fuer den System-Browser, wenn die Seite ein neues Fenster verlangt
/// (`window.open`, Links mit `target="_blank"`). Nur http/https -- andere
/// Schemata (file:, javascript:, eigene Protokolle) werden verworfen.
fn external_target(url: &tauri::Url) -> Option<String> {
match url.scheme() {
"http" | "https" => Some(url.to_string()),
_ => None,
}
}
/// Hauptfenster nach vorne holen. Ein minimiertes Fenster (z. B. per Win+D)
/// wird zuerst wiederhergestellt.
fn show_main_window(app: &AppHandle) {
@@ -750,6 +760,20 @@ pub fn run() {
.center()
.decorations(true)
.resizable(true)
// Neue Fenster (Suche-Widget per `window.open`, „In neuem Tab
// öffnen“ bei XFrame/eigenen Modulen/Favoriten) verwarf die
// Webansicht still -- Nutzer, 29.09.2026: Suche im Client ohne
// Funktion. Jetzt gehen sie wie im Browser-Tab nach aussen, in den
// System-Browser; die App selbst oeffnet kein zweites Fenster.
.on_new_window({
let handle = app.handle().clone();
move |url, _features| {
if let Some(target) = external_target(&url) {
let _ = handle.opener().open_url(target, None::<&str>);
}
tauri::webview::NewWindowResponse::Deny
}
})
.on_download(|webview, event| {
if let tauri::webview::DownloadEvent::Requested { url, .. } = event {
let _ = webview
@@ -1226,6 +1250,28 @@ mod tests {
);
}
#[test]
fn external_target_nur_http_und_https() {
let https = tauri::Url::parse("https://www.google.com/search?q=tessera").unwrap();
assert_eq!(
external_target(&https).as_deref(),
Some("https://www.google.com/search?q=tessera")
);
let http = tauri::Url::parse("http://intranet.local/").unwrap();
assert_eq!(
external_target(&http).as_deref(),
Some("http://intranet.local/")
);
for bad in [
"file:///C:/Windows/system32/calc.exe",
"javascript:alert(1)",
"ms-settings:privacy",
] {
let url = tauri::Url::parse(bad).unwrap();
assert_eq!(external_target(&url), None, "{bad}");
}
}
#[test]
fn parse_server_url_gueltige_adresse() {
let parsed = parse_server_url("https://tessera.ctl.de").unwrap();