From 1f99a10322050e6d11c54a4dbd8c973b3c973726 Mon Sep 17 00:00:00 2001 From: jiahaosheng Date: Mon, 25 Aug 2025 11:04:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(frontend):=20=E4=BF=AE=E5=A4=8D=20Safari=20?= =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E4=B8=8B=E9=82=80=E8=AF=B7=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E5=A4=8D=E5=88=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 Safari 浏览器中,直接使用 navigator.clipboard.writeText 可能导致权限问题 - 通过在 setTimeout 中调用 clipboard API,规避了 Safari 的权限限制 --- frontend_nuxt/components/HeaderComponent.vue | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/frontend_nuxt/components/HeaderComponent.vue b/frontend_nuxt/components/HeaderComponent.vue index 37a824c93..909189529 100644 --- a/frontend_nuxt/components/HeaderComponent.vue +++ b/frontend_nuxt/components/HeaderComponent.vue @@ -149,8 +149,20 @@ const copyInviteLink = async () => { if (res.ok) { const data = await res.json() const inviteLink = data.token ? `${WEBSITE_BASE_URL}/signup?invite_token=${data.token}` : '' - await navigator.clipboard.writeText(inviteLink) - toast.success('邀请链接已复制') + /** + * navigator.clipboard在webkit中有点奇怪的行为 + * https://stackoverflow.com/questions/62327358/javascript-clipboard-api-safari-ios-notallowederror-message + * https://webkit.org/blog/10247/new-webkit-features-in-safari-13-1/ + */ + setTimeout(() => { + navigator.clipboard.writeText(inviteLink) + .then(() => { + toast.success('邀请链接已复制') + }) + .catch(() => { + toast.error('邀请链接复制失败') + }) + }, 0) } else { const data = await res.json().catch(() => ({})) toast.error(data.error || '生成邀请链接失败')