当前位置: 首页 > news >正文

React实现点击按钮复制操作【navigator.clipboard与document.execCommand】

做需求的时候看到有一个功能是点击复制图标,将内容复制到剪贴板中

如图:
在这里插入图片描述
然后我就下意识的写了这样一段代码

		<Row className='ConfigToolCopy'><div> {$t('下载地址')}</div><div><CopyOutlinedstyle={{ cursor: 'pointer' }}onClick={() => {navigator.clipboard.writeText('要复制到剪贴板的地址');message.success($t('com.Copysuccess'));}}/></div></Row>

但是这样做有一个问题就是:
使用 navigator.clipboard.writeText() API(适用于 HTTPS 环境)不适合HTTP环境,所以测试检查出来HTTP环境无法复制

所以做出如下修改

<CopyOutlinedstyle={{ cursor: 'pointer' }}onClick={() => {if (navigator.clipboard && window.isSecureContext) {navigator.clipboard.writeText('要复制到剪贴板的地址');} else {// 降级到已弃用的 execCommandconst input = document.createElement('input');input.value ='要复制到剪贴板的地址'document.body.appendChild(input);input.select();document.execCommand('copy');document.body.removeChild(input);}message.success($t('com.Copysuccess'));}}/>

这段代码是一个降级复制方案的实现,用于在不支持现代 Clipboard API 的浏览器环境中实现复制功能。
代码作用分析:

1. 创建临时输入框

动态创建一个临时的 <input> 元素,用于承载要复制的文本内容。

2. 设置复制内容

将需要复制的下载链接赋值给临时输入框的 value 属性。

3. 添加到DOM

将临时输入框添加到页面中,使其成为可操作的元素。

4. 选中文本

自动选中输入框中的所有文本内容,为复制操作做准备。

5. 执行复制命令
使用已弃用的 execCommand('copy') 方法将选中的文本复制到剪贴板。

6. 清理临时元素
复制完成后,立即从DOM中移除临时输入框,避免页面污染。

这段代码主要用于支持较老的浏览器版本,确保复制功能在各种环境下都能正常工作,体现了代码的渐进增强设计理念。

http://www.dtcms.com/a/364378.html

相关文章:

  • 基于单片机PWM信号发生器系统Proteus仿真(含全部资料)
  • 平衡车 - 电机调速
  • 基于单片机车内换气温度检测空气质量检测系统Proteus仿真(含全部资料)
  • 单片机点灯
  • Linux 网络编程中核心函数`recv`。
  • zynq 开发系列 新手入门:GPIO 连接 MIO 控制 LED 闪烁(SDK 端代码编写详解)
  • Spring Boot 实现数据库表变更监听的 Redis 消息队列方案
  • 单片机控制两只直流电机正反转C语言
  • 变频器实习DAY42 VF与IF电机启动方式
  • Excel 电影名匹配图片路径教程:自动查找并写入系统全路径
  • wpf 自定义控件,只能输入小数点,并且能控制小数点位数
  • 机器学习从入门到精通 - Python环境搭建与Jupyter魔法:机器学习起航必备
  • 如何在modelscope上上传自己的MCP服务
  • 【收藏】2025 前端开发者必备 SVG 资源大全
  • 【2025ICCV-持续学习方向】一种用于提示持续学习(Prompt-based Continual Learning, PCL)的新方法
  • 【CouponHub开发记录】SpringAop和分布式锁进行自定义注解实现防止重复提交
  • RAG|| LangChain || LlamaIndex || RAGflow
  • kafka概念之间关系梳理
  • mac idea 配置了Gitlab的远程地址,但是每次pull 或者push 都要输入密码,怎么办
  • 项目中常用的git命令
  • python基础案例-数据可视化
  • Streamlit 数据看板模板:非前端选手快速搭建 Python 数据可视化交互看板的实用工具
  • 【Linux】为什么死循环卡不死 Linux?3 个核心逻辑看懂进程优先级与 CPU 调度密码
  • Langchain4j 整合MongoDB 实现会话持久化存储详解
  • 电表连网不用跑现场!耐达讯自动化RS485转Profinet网关 远程配置+技术支持,真能做到!
  • 单元测试数据库回滚问题
  • 如何在FastAPI中巧妙隔离依赖项,让单元测试不再头疼?
  • 10 分钟掌握 Selenium 8 大元素定位法:从踩坑到精通
  • Python分布式任务队列:万级节点集群的弹性调度实践
  • 深入剖析Spring Boot中Spring MVC的请求处理流程