有两种方案
使用现代浏览器的 Async Clipboard API(推荐)或者使用传统的 document.execCommand('copy') (已废弃,但兼容性好)。
注意事项
重要注意事项
- HTTPS 环境:出于安全考虑,
navigator.clipboard.writeText()在大多数现代浏览器中要求页面必须运行在 HTTPS 环境下,或者在localhost上进行测试。 - 用户手势:复制操作必须由用户手势触发(如点击事件),不能在页面加载时自动执行。
- 权限问题:在部分浏览器(如 Firefox)中,可能需要请求剪贴板权限。
使用现代浏览器的 Async Clipboard API
// --- 复制功能 ---
const handleCopy = async (fieldName) => {
try {
// 1. 执行复制操作
const textToCopy = formInviter.value[fieldName].value;
await navigator.clipboard.writeText(textToCopy);
// 2. 只有复制成功后,才更新状态为“已复制”
formInviter.value[fieldName].copyed = true;
// 3. 1.5秒后复原状态
setTimeout(() => {
formInviter.value[fieldName].copyed = false;
}, 1500);
} catch (err) {
instance.proxy.msgFail("复制失败");
}
};