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

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.xdnf.cn/news/19818.html

相关文章:

  • Elasticsearch面试精讲 Day 6:Query DSL查询语法详解
  • 【JAVA】windows本地跑zookeeper,然后使用代码连接服务获取znode数据
  • 【leetcode】130. 被围绕的区域
  • NLP插曲番外 · 猫猫狐狐问答夜话
  • 分词器详解(一)
  • 信息融智学=信息哲学+信息科学+信息技术+信息系统工程+信息处理之智
  • 组长跟我说,她招人看重的是数据分析能力
  • 计算机视觉(七):膨胀操作
  • 机器学习 - Kaggle项目实践(8)Spooky Author Identification 作者识别
  • awk命令
  • GitHub 上那些值得收藏的英文书籍推荐(计算机 非计算机类)
  • 逻辑回归:从原理到实战的完整指南
  • 刻意练习理论
  • 群晖为家纺企业 500 名员工打造企业网盘,赋能家纺制造效率飞跃
  • Python数据分析与处理(二):将数据写回.mat文件的不同方法【超详细】
  • 第二章 Windows 核心概念通俗解析
  • Linux 的 swap 是什么
  • Vue3 警告:Runtime directive used on component with non-element root node 解决方案
  • 16k+ star! 只需要DDL就能一键生成数据库关系图!
  • 正运动控制卡学习-网络连接
  • Java 黑马程序员(进阶篇1)
  • 从BERT到RoBERTa、ALBERT:揭秘Encoder-only预训练模型的进化之路
  • 【常用SQL语句和语法总结】
  • 数据科学家如何更好地展示自己的能力
  • 项目中 Spring Boot 配置文件未生效该如何解决
  • JavaScript箭头函数与普通函数:两种工作方式的深度解析
  • 诊断服务器(Diagnostic Server)
  • Linux 字符设备驱动框架学习记录(三)
  • Spring Boot 全局异常处理问题分析与解决方案
  • PastePal for Mac 剪贴板历史记录管理器