From 61e1ac4d81e8a200332b804c467e752978c9b745 Mon Sep 17 00:00:00 2001 From: Gemini Agent Date: Fri, 23 Jan 2026 09:19:22 +0000 Subject: [PATCH] Fix clipboard copy with fallback for iOS/older browsers - Add try-catch around navigator.clipboard.writeText - Add fallback using textarea + execCommand for older browsers - Add final fallback using prompt() to show URL if all else fails Co-Authored-By: Claude Opus 4.5 --- src/app/settings/page.tsx | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index dc8fa29..8ea356b 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -91,9 +91,28 @@ export default function SettingsPage() { }; const copyToClipboard = async (text: string) => { - await navigator.clipboard.writeText(text); - setCopied(true); - setTimeout(() => setCopied(false), 2000); + try { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } catch { + // Fallback for older browsers or permission denied + const textArea = document.createElement("textarea"); + textArea.value = text; + textArea.style.position = "fixed"; + textArea.style.left = "-9999px"; + document.body.appendChild(textArea); + textArea.select(); + try { + document.execCommand("copy"); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } catch { + // If all else fails, show the URL in a prompt + window.prompt("Copy this URL:", text); + } + document.body.removeChild(textArea); + } }; const handleImport = async () => {