web 页面 复制功能 如何实现

61 阅读1分钟

有两种方案
使用现代浏览器的 Async Clipboard API(推荐)或者使用传统的 document.execCommand('copy') (已废弃,但兼容性好)。

注意事项

重要注意事项

  1. HTTPS 环境:出于安全考虑,navigator.clipboard.writeText() 在大多数现代浏览器中要求页面必须运行在 HTTPS 环境下,或者在 localhost 上进行测试。
  2. 用户手势:复制操作必须由用户手势触发(如点击事件),不能在页面加载时自动执行。
  3. 权限问题:在部分浏览器(如 Firefox)中,可能需要请求剪贴板权限。

使用现代浏览器的 Async Clipboard API

image.png



// --- 复制功能 ---
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("复制失败");
  }
};