JavaScript 读写剪贴板之方式汇总
JavaScript操作剪贴板虽然存在安全问题,但在某些应用场景下还是很方便的,比如复制一个link 等,JavaScript操作剪贴板的方式有:
方式1. 使用navigator 的Clipboard 对象
方式2. 使用 document.execCommand
方式3. window.clipboardData 对象
方式4. 使用一些封装的第三方库
方式1 和方式2 是JavaScript 语言原生的, 方式2是比较传统的方式,虽然目前各浏览器还支持, 但存在着一些缺点和不足;
方式1是推荐的方式,因为出现的时间较晚,对浏览器版本有一定的要求;方式3是IE 浏览器特有的, 不够在Edge版本也已经不支持了;方式4是使用封装的一些clipboard组件。
1. [推荐方式] navigator 的Clipboard 对象
- 所有操作是异步的,返回Promise对象, 不会造成页面卡顿
- 可以将任何内容(包括图片)放入剪贴板
基本使用
- 获取Clipboard 对象, Clipboard 包含在navigator中,
const clipboard = navigator.clipboard;
如果浏览器不支持,则返回undefined
写入内容到剪贴板
navigator.clipboard.writeText('写入的内容')
从剪贴板读取内容。
navigator.clipboard.readText()
读取的时候浏览器会弹出一个窗口进行确认。
因为这里使用的是异步的返回,所以方法返回的是一个Promise对象, 要获取剪贴板内容,可以在then方法中获取。
clipPromise.then(function(clipText){alert(clipText); // 剪贴板内容});
- 完整示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ClipBoard Demo</title>
<script type="text/javascript">function readClipText(){var clipPromise = navigator.clipboard.readText();clipPromise.then(function(clipText){alert(clipText);});}</script>
</head>
<body>
<input type="button" value="Clipboard-写数据" onclick="navigator.clipboard.writeText('123456')">
<input type="button" value="Clipboard-读数据" onclick="navigator.clipboard.readText().then(function(clipText){ alert(clipText);})">
<input type="button" value="Clipboard-读数据2" onclick="readClipText()">
</body>
</html>
限制
- 在Chrome 只有HTTPS 的页面支持(本地开发localhost除外)
- 对应读和写两个权限。 写权限自动授予,读权限需要用户同意。 也就是在代码在读取剪切板的数据时会弹出一个对对话框让用户确认。
浏览器兼容
2. [废弃的方式] document.execCommand
功能已经过时了, 虽然在一些浏览器中功能也正常, 不建议使用, 因为有可能随时会不支持。
- 使用方式是先选中文本, 然后调用
document.execCommand('copy')
复制到剪切板。 - 粘贴时,使用
document.execCommand('paste')
将剪切板中的内容输出到当前焦点元素
document.execCommand('copy')
document.execCommand('cut')
document.execCommand('paste')
完整示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document clipboard</title>
<script type="text/javascript">function myDocClipboard(){document.getElementById('myText').select();document.execCommand('copy');}
</script>
</head>
<body>
<input type="text" id="myText" value="123456"/>
<input type="button" value="document-剪切板" onclick="myDocClipboard()">
</body>
</html>
限制
- 只能将选中的内容复制到剪贴板,而不能是任意内容
- 操作是同步的,如果数据量大, 页面卡顿
3. [ IE特有方式] window.clipboardData 对象
在IE浏览器中,window 对象有一个clipboardData对象,该对象的setData和getData用来设置或获取剪切板中的值。
在IE 11 中可以使用, 但是在Microsoft Edge已经不能使用了。
设置剪切板内容
window.clipboardData.setData('Text', '123456')
获取剪切板内容
window.clipboardData.getData('Text')
测试:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<input type="button" value="IE剪切板-设置值" onclick="window.clipboardData.setData('Text', '123456')">
<input type="button" value="IE剪切板-获取值" onclick="alert(window.clipboardData.getData('Text'))">
</body>
</html>
4. [其他方式] 第三方库
早期有很多第三方库使用Flash方式实现剪贴板功能, 但是现在很多浏览器默认都不提供对Flash的支持了,所有那种方式自然就不推荐使用了,这里就介绍一个还不错的库:
clipboard https://github.com/zenorocha/clipboard.js
轻量级 ,整个库文件 3k多,不依赖Flash。
步骤也很简单:
- 导入库
- 创建 ClipboardJS 对象
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Clipboard 库</title>
<script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.10/dist/clipboard.min.js"></script>
</head>
<body><textarea id="bar">需要复制的内容</textarea><button class="btn" data-clipboard-action="copy" data-clipboard-target="#bar">复制到剪切板</button><script>var clipboard = new ClipboardJS('.btn');</script></body>
</html>
JavaScript 读写剪贴板之方式汇总相关推荐
- ❗HTML引入JavaScript的三种常用方式汇总❗
引言 JavaScript是一门脚本语言,虽然名字里有Java,但是和Java没有一点关系,它原名是LiveScript:现在的前端JavaScript可以说是异常火爆,但是博主本人并不准备向前端发展 ...
- js怎么打开一个html文件怎么打开方式,JavaScript实现打开链接页面的方式汇总
在页面中的链接除了常规的方式以外,如果使用javascript,还有很多种方式,下面是一些使用javascript,打开链接的几种方式: 1.使用window的open方法打开链接,这里可是在制定页面 ...
- C++读写txt文件方式以及基于opencv的Mat数据类型读写txt文件
一.打开文件 在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是: void open(const char* filename,int mode,int access); ...
- 阿里云自助建站方式汇总
本文汇总了阿里云各类型网站的部署方式,便于您自助搭建网站. 网站类型 部署方式 说明 WordPress 镜像部署 WordPress 是一款常用的搭建个人博客网站的软件.您可以用WordPress架 ...
- python 常用文件读取和保存方式汇总
python 常用文件读取和保存方式汇总 txt文件 open和close函数 文件对象的方法 读写示例理解rwa中的指针 w a r txt文件 open和close函数 fileObject = ...
- 100 道 JavaScript 面试题及答案汇总(下)
英文 | https://betterprogramming.pub/100-javascript-interview-questions-58e22e30f7f1 翻译 | 杨小二 接上篇< ...
- 利用JavaScript从剪贴板获取图片并上传服务器
1.参考: 使用 JavaScript File API 实现文件上传 FileReader.readAsDataURL() 基于Servlet3的文件上传中的示例2:基于JQuery的单文件上传 2 ...
- VS Code - Debugger for Chrome调试JavaScript的两种方式
VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故,博客写的不是很多,一直想写一篇VS Code - Debugger for Chrom ...
- java.io几种读写文件的方式
一.Java把这些不同来源和目标的数据都统一抽象为数据流. Java语言的输入输出功能是十分强大而灵活的. 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作 ...
- JavaScript之各种继承方式和优缺点
2019独角兽企业重金招聘Python工程师标准>>> JavaScript之各种继承方式和优缺点 原型链继承 function Parson(){this.name = 'hy' ...
最新文章
- 进程管理ps,top
- 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)
- android 模拟器
- leetcode 844. 比较含退格的字符串
- mysql优化varchar索引_MySQL优化--概述以及索引优化分析
- NYOJ-水池数目(bfs)
- 真不是炼丹,务实敢为的 MoCo v3
- c语言程序设计 江汉大学,C语言程序设计B卷
- TCPIP详解 IP路由选择
- 基于opencv的人脸识别
- 从自走棋代码分析游戏机制--棋池、回蓝、目标判断、掉落概率与新英雄
- 几款好用的内网穿透工具
- 安泰测试-安捷伦N5182A射频矢量信号发生器
- 3d-face-reconstruction比较
- 如何 拆 贴片电容 而不是把焊盘给搞坏
- 我的电脑中多了CD驱动器怎么办
- linux TC命令使用总结
- 合同相似可逆等价矩阵的关系及性质_矩阵的合同,等价与相似的联系与区别.doc...
- 怎么用matlab分解因式,MATLAB因式分解
- BSN-DDC 基础网络关键知识点(三)接入DDC网络