fix(ui): don't strand the Mini App on a cancelled GCG share
On iOS WKWebView (the Telegram Mini App), cancelling the Web Share sheet fell through to the Blob <a download> fallback. iOS ignores the download attribute, so clicking the anchor navigated the webview to the blob: URL — replacing the SPA with the raw GCG file, with no way back (force-quit only). The share path no longer falls back to a download: Web Share is available on that platform, so a cancelled or failed share is a no-op and the user can retry. The Blob download stays the desktop-only path (no Web Share).
This commit is contained in:
+7
-2
@@ -25,12 +25,17 @@ export async function shareOrDownloadGcg(gcg: GcgExport): Promise<void> {
|
||||
const file = new File([gcg.content], gcg.filename, { type: 'application/x-gcg' });
|
||||
const nav = typeof navigator !== 'undefined' ? navigator : undefined;
|
||||
if (pickGcgDelivery(nav, file) === 'share' && nav) {
|
||||
// Web Share is available (mobile, including the iOS Telegram Mini App): use it and stop here
|
||||
// whatever the outcome. Do NOT fall back to the Blob download — on iOS WKWebView an
|
||||
// <a download> navigates the webview to the blob: URL, replacing the SPA with the raw file
|
||||
// and stranding the app, so a cancelled or failed share must simply do nothing (the user can
|
||||
// retry). The download path is only for desktop browsers without Web Share.
|
||||
try {
|
||||
await nav.share({ files: [file], title: gcg.filename });
|
||||
return;
|
||||
} catch {
|
||||
// The user cancelled or sharing failed — fall back to a download.
|
||||
/* cancelled or failed — intentionally a no-op (see above) */
|
||||
}
|
||||
return;
|
||||
}
|
||||
downloadFile(gcg.content, gcg.filename);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user