Просмотр исходного кода

fix(app): restore external link opening in system browser (#10697)

Alex Yaroshuk 3 недель назад
Родитель
Сommit
984518b1c0
1 измененных файлов с 14 добавлено и 9 удалено
  1. 14 9
      packages/desktop/src/index.tsx

+ 14 - 9
packages/desktop/src/index.tsx

@@ -328,18 +328,23 @@ render(() => {
   const [serverPassword, setServerPassword] = createSignal<string | null>(null)
   const [serverPassword, setServerPassword] = createSignal<string | null>(null)
   const platform = createPlatform(() => serverPassword())
   const platform = createPlatform(() => serverPassword())
 
 
-  function handleClick(e: MouseEvent) {
-    const link = (e.target as HTMLElement).closest("a.external-link") as HTMLAnchorElement | null
-    if (link?.href) {
-      e.preventDefault()
-      platform.openLink(link.href)
+  onMount(() => {
+    // Handle external links - open in system browser instead of webview
+    const handleClick = (e: MouseEvent) => {
+      const target = e.target as HTMLElement
+      const link = target.closest("a") as HTMLAnchorElement | null
+
+      if (link?.href && !link.href.startsWith("javascript:") && !link.href.startsWith("#")) {
+        e.preventDefault()
+        e.stopPropagation()
+        e.stopImmediatePropagation()
+        void shellOpen(link.href).catch(() => undefined)
+      }
     }
     }
-  }
 
 
-  onMount(() => {
-    document.addEventListener("click", handleClick)
+    document.addEventListener("click", handleClick, true)
     onCleanup(() => {
     onCleanup(() => {
-      document.removeEventListener("click", handleClick)
+      document.removeEventListener("click", handleClick, true)
     })
     })
   })
   })