JavaScript复制内容到系统剪切板的实现

简介: 最近写一个多平台接入的代码,有个小需求,一键嵌入代码,Mark一下实现过程和遇到的一些问题,大家共勉。

最近写一个多平台接入的代码,有个小需求,一键嵌入代码,Mark一下实现过程和遇到的一些问题,大家共勉。


实现方式


搜索资料常见的就2种方式

1 第三方库:常用的是clipboard.js

2 原生方法:document.execCommand()


简介

1 其实支持这种需求的第方库不是很多,但是最最常用的就是clipboard.js

这是 官网 https://clipboardjs.com/

非常easy 这里就不在多做介绍

2 哈哈惊不惊喜,意不意外,JS竟然原生支持复制到剪切板功能,但是我搜索的资料的时候,很多答案给人的感觉就是JS原生不支持,让我有了JS真lower的感觉。

后来搜索文档发现有个document.execCommand()方法 MDN文档,我就尝试了几次,我这人就喜欢实践出真知,没有详细看文档,但这样也导致遇到了很多不是坑的坑,后边会列出😢😢。


方法介绍

bool = document.execCommand(aCommandName, aShowDefaultUI, aValueArgument)

返回一个Boolean值表示操作是否成功

aCommandName:表示命令名称,常见的就是copy

aShowDefaultUI:是否展示用户界面,一般都是false

aValueArgument:额外的参数,具体看文档吧,我没有使用过

书接上文,为啥之前我们(主要是我)没有搜索到document.execCommand的相关实现资料呢,因为这个方法兼容性不好,哈哈但是现在兼容性不错,主流浏览器和移动端基本都支持

有图有真相,具体的还可以参考兼容性


0{~~KPR[PVBMSH76D4KD62O.png

html 代码我项目用的是Vue的框架

T[B6SB@U%%MEOZB86_%9T%3.png

JS

5G4L_6F@_~]~(39X{MPA4YV.png

这是常见的复制输入框的内容。

bug 坑坑

那我如果复制其他标签的内容呢比方说p div span标签内容呢,或者直接赋值呢

这就是我上面说的不好好看文档定义的坑,(其实是咱看着英文就头晕,论会一门外语的重要性😢😢)


重点解释  坑


这就不贴定义了,直接说就是定义这个方法只适用可编辑区域。所以除了inout textarea标签其他标签是通通不行的,那咋办呢。


一个思路

就是写一个看不见的input,把需要复制的值赋给这个输入框

但是这里大家注意哦 不要把input 设置hidden属性,不要问为什么,因为血的教训😢😢

其实我的理解是因为hidden隐藏了,就没办法输入了,就不算可编辑区了


不显示的方法

1 JS创建input标签

const input=document.createElement('input');

document.body.appendChild(input);

input.setAttribute('value','听说你想复制我');

input.select();

2 CSS设置

定位等,自己尝试吧


iOS坑

又是iOS奇葩,在前端这块,我遇到的奇葩iOS文本比安卓多。


现象

1 点击复制屏幕下方会出现抖动,慢动作就是键盘弹起来又瞬间收回去

2 无法复制


原因

1 因为聚焦所以键盘被拉起了

2 input.select()在ios下没有选中全部内容


解决办法

1键盘失去焦点就行,只读 input.setAttribute('readonly', 'readonly')

2 设置选中内容就行, input.setSelectionRange(0, input.value.length)





相关文章
|
3月前
|
JavaScript 前端开发
用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格
用html+javascript打造公文一键排版系统12:删除附件说明中“附件:”里的空格
|
3月前
|
前端开发
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统1:设计界面
用html+javascript打造公文一键排版系统1:设计界面
|
4月前
|
JavaScript 前端开发 开发者
Vue.js 框架大揭秘:响应式系统、组件化与路由管理,震撼你的前端世界!
【8月更文挑战第27天】Vue.js是一款备受欢迎的前端JavaScript框架,以简洁、灵活和高效著称。本文将从三个方面深入探讨Vue.js:响应式系统、组件化及路由管理。响应式系统为Vue.js的核心特性,能自动追踪数据变动并更新视图。例如,通过简单示例代码展示其响应式特性:`{{ message }}`,当`message`值改变,页面随之自动更新。此外,Vue.js支持组件化设计,允许将复杂界面拆分为独立且可复用的组件,提高代码可维护性和扩展性。如创建一个包含标题与内容的简单组件,并在其他页面中重复利用。
82 3
|
21天前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
23 2
2024年5月node.js安装(winmac系统)保姆级教程
|
18天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
33 2
|
2月前
|
缓存 JSON JavaScript
Node.js模块系统
10月更文挑战第4天
43 2
|
2月前
|
Web App开发 JavaScript API
构建高效后端系统:Node.js与Express框架的实践之路
【9月更文挑战第37天】在数字化时代的浪潮中,后端开发作为技术架构的核心,承载着数据处理和业务逻辑的重要职责。本文将深入探讨如何利用Node.js及其强大的Express框架来搭建一个高效、可扩展的后端系统。我们将从基础概念讲起,逐步引导读者理解并实践如何设计、开发和维护一个高性能的后端服务。通过实际代码示例和清晰的步骤说明,本文旨在为初学者和有经验的开发者提供一个全面的指南,帮助他们在后端开发的旅途上走得更远。
52 3
|
2月前
|
JavaScript 前端开发
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
|
4月前
|
机器学习/深度学习 人工智能 前端开发
【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
使用TensorFlow.js在浏览器中进行情感分析是一个非常实用的应用场景。TensorFlow.js 是一个用于在JavaScript环境中训练和部署机器学习模型的库,使得开发者能够在客户端直接运行复杂的机器学习任务。对于情感分析,我们可以使用预先训练好的模型来识别文本中的积极、消极或中性情感。
114 4
【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统