复制邀请码按钮在 https 页面正常,切到内网 http 地址后 navigator.clipboard 是 undefined,点按钮报 Cannot read properties of undefined。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

if (navigator.clipboard) await navigator.clipboard.writeText(code);
else {
  const ta = document.createElement('textarea'); ta.value = code;
  document.body.appendChild(ta); ta.select(); document.execCommand('copy'); ta.remove();
}

Clipboard API 只在安全上下文可用,http 和部分 WebView 不算安全上下文。代码没有降级到 execCommand。这一点先确认清楚,后面就不用反复试。

「Clipboard API 兼容」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

具体做法是,先判断 navigator.clipboard 是否存在;不存在时用临时 textarea 加 execCommand 兜底;兜底也失败就弹出可长按复制的文本框;http 和 https 两种地址下各点一次。

改完照着核一遍,http 页面点击复制也能成功,粘贴出来是完整邀请码,控制台没有 undefined 报错。

作者 9823189