From 66d5f4f7d43b23bf7d6eb10a1f11f1b90bd3d39c Mon Sep 17 00:00:00 2001 From: "Gan, Jimmy" Date: Sun, 19 Apr 2026 00:47:22 +0800 Subject: [PATCH] fix: use hidden iframe for downloads to avoid popup blockers --- dashboard/frontend/src/lib/api.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/dashboard/frontend/src/lib/api.js b/dashboard/frontend/src/lib/api.js index bb0abc7..1f0b2c7 100644 --- a/dashboard/frontend/src/lib/api.js +++ b/dashboard/frontend/src/lib/api.js @@ -217,8 +217,16 @@ export async function download(path, filename) { const { token: downloadToken } = await tokenResponse.json(); - // Navigate directly to download URL - browser handles streaming natively - window.location.href = `${BASE}/files/download?token=${downloadToken}`; + // Use hidden iframe for download - avoids page navigation and popup blockers + const iframe = document.createElement('iframe'); + iframe.style.display = 'none'; + iframe.src = `${BASE}/files/download?token=${downloadToken}`; + document.body.appendChild(iframe); + + // Clean up iframe after download starts + setTimeout(() => { + document.body.removeChild(iframe); + }, 5000); } catch (e) { console.error("Download error:", e); throw e;