diff --git a/neode-ui/src/components/AppLauncherOverlay.vue b/neode-ui/src/components/AppLauncherOverlay.vue index ee23ac24..26e5d94d 100644 --- a/neode-ui/src/components/AppLauncherOverlay.vue +++ b/neode-ui/src/components/AppLauncherOverlay.vue @@ -304,9 +304,17 @@ function refreshIframe() { } function openInNewTab() { - if (store.url) { - window.open(store.url, '_blank', 'noopener,noreferrer') + if (!store.url) return + // Inside the Archipelago companion app, open the app in the in-app WebView + // instead of window.open — which the WebView suppresses for noopener popups + // (so the tap silently no-ops). The native bridge is reliable; fall back to + // window.open in a plain mobile browser. + const native = (window as any).ArchipelagoNative + if (native && typeof native.openInApp === 'function') { + native.openInApp(store.url) + return } + window.open(store.url, '_blank', 'noopener,noreferrer') } function openInNewTabAndClose() {