fix(desktop): Link-Klicks vor dem Opener-Skript des Clients abfangen
Die erste Fassung lauschte auf window und lief damit nach dem von tauri-plugin-opener eingeschleusten Link-Skript. Dieses ruft bei target=_blank preventDefault und plugin:opener|open_url auf, was von der Server-Seite aus nicht freigegeben ist - der Klick verpuffte weiter (auf VM 8233 per Klick-Protokoll gemessen). Der Helfer lauscht jetzt auf document: nach Reacts Handlern, vor dem Opener-Skript. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -6,16 +6,20 @@ import { useIsDesktopClient } from '@/lib/desktop-client';
|
||||
/**
|
||||
* DesktopExternalLinks (quick-261001-cxo) — Links mit `target="_blank"`
|
||||
* (Favoriten, „In neuem Tab öffnen“ bei XFrame/eigenen Modulen, Quellen im
|
||||
* Ausschreibungs-Radar) taten im Desktop-Client unter Windows beim Klick
|
||||
* nichts, `window.open` (Such-Widget) dagegen landet ueber `on_new_window`
|
||||
* im System-Browser (VM 8233, 01.10.2026: Favorit ohne Wirkung, Suche oeffnet
|
||||
* Edge). Im Client leitet dieser Helfer solche Klicks deshalb auf
|
||||
* `window.open` um.
|
||||
* Ausschreibungs-Radar) taten im Desktop-Client beim Klick nichts, waehrend
|
||||
* `window.open` (Such-Widget) ueber `on_new_window` im System-Browser landet.
|
||||
*
|
||||
* Lauscht auf `window` in der Bubble-Phase, also NACH Reacts Handlern am
|
||||
* Dokument: ein Klick, den die Seite selbst verhindert (Favoriten im
|
||||
* Bearbeiten-Modus), bleibt verhindert. Nur http/https -- alles andere
|
||||
* verwirft der Client ohnehin.
|
||||
* Ursache (VM 8233, 01.10.2026, gemessen): tauri-plugin-opener schleust ein
|
||||
* Skript ein, das auf `window` solche Klicks abfaengt, `preventDefault()`
|
||||
* ruft und `plugin:opener|open_url` aufruft -- von der Server-Seite aus ist
|
||||
* dieser Aufruf nicht freigegeben, der Klick verpufft. Dieser Helfer kommt
|
||||
* ihm zuvor und oeffnet per `window.open`; das Opener-Skript sieht den Klick
|
||||
* dann als verhindert und tut nichts.
|
||||
*
|
||||
* Lauscht deshalb auf `document` in der Bubble-Phase: NACH Reacts Handlern
|
||||
* (Wurzel `document`, frueher registriert) -- ein Klick, den die Seite selbst
|
||||
* verhindert (Favoriten im Bearbeiten-Modus), bleibt verhindert --, aber VOR
|
||||
* dem Opener-Skript auf `window`. Nur http/https.
|
||||
*/
|
||||
function externalTarget(event: MouseEvent): HTMLAnchorElement | null {
|
||||
if (event.defaultPrevented) return null;
|
||||
@@ -45,11 +49,11 @@ export function DesktopExternalLinks() {
|
||||
window.open(anchor.href, '_blank', 'noopener,noreferrer');
|
||||
};
|
||||
|
||||
window.addEventListener('click', handler);
|
||||
window.addEventListener('auxclick', handler);
|
||||
document.addEventListener('click', handler);
|
||||
document.addEventListener('auxclick', handler);
|
||||
return () => {
|
||||
window.removeEventListener('click', handler);
|
||||
window.removeEventListener('auxclick', handler);
|
||||
document.removeEventListener('click', handler);
|
||||
document.removeEventListener('auxclick', handler);
|
||||
};
|
||||
}, [isDesktop]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user