From e7337ab0898e64e8f34b4f6d143c800230ab4c9b Mon Sep 17 00:00:00 2001 From: Karlcarlo Date: Mon, 7 Sep 2026 20:42:49 +0800 Subject: [PATCH] =?UTF-8?q?wx-h5-demo:=20=E8=B0=83=E8=AF=95=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=8A=A0=E5=A4=8D=E5=88=B6=E6=8C=89=E9=92=AE(Clipboar?= =?UTF-8?q?d=20API=E2=86=92execCommand=E2=86=92=E6=89=8B=E5=8A=A8=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E5=8C=BA=E4=B8=89=E5=B1=82=E5=85=9C=E5=BA=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/index.html b/index.html index 5a537b3..569836a 100644 --- a/index.html +++ b/index.html @@ -80,6 +80,7 @@ 调试日志 + @@ -134,6 +135,56 @@ el('dbgClose').addEventListener('click', function () { el('dbgPanel').classList.remove('open'); }); el('dbgClear').addEventListener('click', function () { el('dbgLog').innerHTML = ''; dbgCount = 0; el('dbgCount').textContent = ''; }); + // 复制日志:拼纯文本(时间 + 内容),Clipboard API 优先,失败/不可用则降级 execCommand + function copyWithFallback(text) { + try { + var ta = document.createElement('textarea'); + ta.value = text; ta.style.position = 'fixed'; ta.style.opacity = '0'; + document.body.appendChild(ta); ta.select(); + var ok2 = document.execCommand('copy'); + document.body.removeChild(ta); + return !!ok2; + } catch (e) { + return false; + } + } + // 终极大兜底:两种 API 都失败时,弹出一个可全选/长按的文本区让用户手动复制 + function manualCopy(text) { + dbg('自动复制不可用,弹出文本区请长按/全选复制 ↓', 'warn'); + var box = el('dbgManual'); + if (!box) { + box = document.createElement('div'); + box.id = 'dbgManual'; + box.style.cssText = 'position:fixed;left:10px;right:10px;top:10px;z-index:300;background:#fff;border:2px solid #F4593C;border-radius:12px;padding:10px;box-shadow:0 6px 20px rgba(0,0,0,.3);max-height:70vh;display:flex;flex-direction:column'; + box.innerHTML = '
' + + '手动复制日志' + + '
' + + '' + + '
提示:微信里长按文本 → 全选 → 复制。
'; + document.body.appendChild(box); + el('dbgManualClose').addEventListener('click', function () { box.parentNode.removeChild(box); }); + var t = el('dbgManualText'); + setTimeout(function () { t.focus(); t.select(); }, 300); + } + } + el('dbgCopy').addEventListener('click', function () { + var text = ''; + var lns = el('dbgLog').querySelectorAll('.ln'); + for (var i = 0; i < lns.length; i++) { + var t = (lns[i].querySelector('b') ? lns[i].querySelector('b').textContent : ''); + text += t + ' ' + lns[i].textContent.replace(t, '').trim() + '\n'; + } + text = '[wx-h5-demo 调试日志 v' + VER + ']\n' + text; + function ok() { dbg('已复制 ' + lns.length + ' 条日志到剪贴板', 'ok'); } + function fallback() { if (copyWithFallback(text)) ok(); else manualCopy(text); } + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(text).then(ok, function () { fallback(); }); + } else { + fallback(); + } + }); + function show(tag, title) { el('envTag').textContent = title; el('envTag').className = 'tag ' + (tag === 'ok' ? 'ok' : 'no'); }