复制文字功能写入剪切板的坑

主要解决过程是通义千问+测试。这篇文章写的也不错,本文补充几种情况 juejin.cn/post/718686...

核心提示

  • navigator.clipboard.writeText 安卓不支持 且需要 https,不建议用该方法
  • 苹果设备,点击事件触发时必须立即往剪切板里写入内容,若点击后要ajax请求后再往剪切板里写会失败!!!

建议处理流程

  1. 若写入剪切板前要调用接口。设置一个变量 unsupportCopy: myPlatform.includes('mac') || myPlatform.includes('ios') 判断不支持直接写入剪切板的设备
  2. 点击复制按钮时,若设备支持点击事件和写入剪切板直接有时差,就调用下面的方法写入剪切板。若不支持,就弹出弹框,里面展示内容,然后提供一个按钮,点击复制

实现方案

js 复制代码
    copyStrToClipboard(str, successCb) {
      navigator.clipboard
        .writeText(str)
        .then(() => {
          this.$message.success('复制成功!')
          successCb && successCb()
        })
        .catch((err) => {
          this.$message.error(err)
        })
    }

document.execCommand('copy')

js 复制代码
export function copyToClipboard(text, successCB) {
  const textarea = document.createElement('textarea');
  textarea.value = text; // 直接赋值包含换行符的文本
  textarea.style.position = 'fixed'; // 避免滚动问题
  document.body.appendChild(textarea);
  textarea.select();
  try {
    const successful = document.execCommand('copy');
    if (successful) {
      Message.success('复制成功!')
      successCB && successCB()
    } else {
      Message.error('本设备不支持复制!')
    }
  } catch (err) {
    Message.error('复制失败' + err)
  }
  document.body.removeChild(textarea); // 清理
}

注意,此处复制内容的容器是textarea 而不是 document.createElement('input'),若用的是input,若文本里含 \n 是复制不出来换行的

相关推荐
Jagger_11 分钟前
Cursor + Apifox MCP:告别手动复制接口,AI 助你高效完成接口文档开发
前端
IT_陈寒27 分钟前
Redis性能优化:5个被低估的配置项让你的QPS提升50%
前端·人工智能·后端
Hilaku34 分钟前
重新思考CSS Reset:normalize.css vs reset.css vs remedy.css,在2025年该如何选?
前端·css·代码规范
袁煦丞1 小时前
一图看懂Docker管理 Portainer:cpoar内网穿透实验室第652个成功挑战
前端·程序员·远程工作
右子1 小时前
微信小程序开发“闭坑”指南
前端·javascript·微信小程序
入秋1 小时前
Three.js后期处理实战:噪点 景深 以及色彩调整
前端·javascript·three.js
Asort1 小时前
JavaScript设计模式(七)——桥接模式:解耦抽象与实现的优雅之道
前端·javascript·设计模式
golang学习记2 小时前
从0死磕全栈之Next.js 应用中的认证与授权:从零实现安全用户系统
前端
苏打水com2 小时前
携程前端业务:在线旅游生态下的「复杂行程交互」与「高并发预订」实践
前端·状态模式·旅游
Darenm1112 小时前
深入理解CSS BFC:块级格式化上下文
前端·css