From 373948c28e38465d55e04727b2a8e4aa4edeec63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BA=B8=E9=B9=BF/Zhilu?= Date: Mon, 1 Apr 2024 16:44:55 +0800 Subject: [PATCH] [fix] error handler for codeCopyBtn (#419) --- source/js/plugins/copycode.js | 63 +++++++++++++++-------------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/source/js/plugins/copycode.js b/source/js/plugins/copycode.js index 267227a..85f7c05 100644 --- a/source/js/plugins/copycode.js +++ b/source/js/plugins/copycode.js @@ -1,41 +1,32 @@ -window.codeElements.forEach(code => { - // copy btn +window.codeElements.forEach((codeElement) => { + // 创建复制按钮 const codeCopyBtn = document.createElement('div'); - codeCopyBtn.classList.add('copy-btn'); - codeCopyBtn.innerHTML = ctx.copycode.default_text; - code.appendChild(codeCopyBtn); - codeCopyBtn.addEventListener('click', async () => { - const currentCodeElement = code.children[0]?.innerText; - await copyCode(currentCodeElement); - codeCopyBtn.innerHTML = ctx.copycode.success_text; - codeCopyBtn.classList.add('success'); - hud.toast(ctx.copycode.toast, 2500); - setTimeout(() => { - codeCopyBtn.innerHTML = ctx.copycode.default_text; - codeCopyBtn.classList.remove('success'); - },3000); - }) -}) + codeCopyBtn.className = 'copy-btn'; + codeCopyBtn.textContent = ctx.copycode.default_text; + codeElement.appendChild(codeCopyBtn); -async function copyCode(currentCode) { - if (navigator.clipboard) { - try { - await navigator.clipboard.writeText(currentCode); - } catch (error) { - // 未获得用户许可 - codeCopyBtn.innerText = '未获得用户许可'; + // 添加点击事件监听 + codeCopyBtn.addEventListener('click', async () => { + const codeToCopy = codeElement.querySelector('code')?.textContent || ''; + if (navigator.clipboard) { + try { + await navigator.clipboard.writeText(codeToCopy); + codeCopyBtn.textContent = ctx.copycode.success_text; + codeCopyBtn.classList.add('success'); + hud.toast(ctx.copycode.toast, 2500); + } catch (error) { + codeCopyBtn.textContent = '未获得用户许可'; + codeCopyBtn.classList.add('warning'); + } + } else { + codeCopyBtn.textContent = '浏览器不支持/非HTTPS'; codeCopyBtn.classList.add('warning'); - setTimeout(() => { - codeCopyBtn.innerText = ctx.copycode.default_text; - codeCopyBtn.classList.remove('warning'); - },3000); } - } else { - codeCopyBtn.innerText = '当前浏览器不支持此api'; - codeCopyBtn.classList.add('warning'); + + // 3秒后恢复默认文本 setTimeout(() => { - codeCopyBtn.innerText = ctx.copycode.default_text; - codeCopyBtn.classList.remove('warning'); - },3000); - } -} \ No newline at end of file + codeCopyBtn.textContent = ctx.copycode.default_text; + codeCopyBtn.classList.remove('success', 'warning'); + }, 3000); + }); +}); \ No newline at end of file