js复制粘贴的操作
Clipboard API
Clipboard API
提供了响应剪贴板的功能(复制、粘贴、剪贴)和操作的功能,必须使用Permissions API
获取权限后才能访问剪贴板,没有授权则是不允许读取剪贴板内容的。
Permissions API
这个api提供了权限的一些操作,但是浏览器只支持查询Permissions.query()
和撤销的支持,现在撤销也被废弃,所以只能能使用的方法只有查询权限的方法
使用navigator.permissions
来使用Permissions API
1 | const checkAuth = async ()=>{ |
使用上边的代码可以查看是不是拥有剪贴板的权限navigator.permissions.query
会返回一个对象其中包含state
属性,来表示这个权限的状态
- granted (授予) 不会再弹出获取权限的弹框
- denied (拒绝) 不会再弹出获取权限的弹框,使用剪贴板时候会有报错
- prompt (询问) 没有点击同意或者拒绝关闭了获取权限弹框的状态
read方法
read
方法可以获取剪贴板的任意内容。该方法需要用户明确给予授权。read
方法会返回一个Promise
对象,状态变为fulfilled
后会得到一个数组,每个数组成员都是ClipboardItem
的实例。ClipboardItem
会有一个属性types
和一个方法getType()
- types 返回一个可用的MIME类型的数组。 比如复制一段文字他的MIME类型就为
text/plain
、`text/html - getType 这个方法会返回一个
Promise
对象,状态变为fulfilled
会得到一个Blob
对象。参数接受一个MIME类型,不传或者找不到MIME类型会返回一个错误。1
2
3
4
5
6
7
8if(checkAuth()){
navigator.clipboard.read().then(async data => {
const res = await data[0].getType(data[0].types[0]);
console.log(res)
})
}else{
alert('没有权限')
}
readText方法
readText方法
方法可以获取剪贴板的文本内容。该方法需要用户明确给予授权。
返回一个Promise
对象,状态变为fulfilled
会得到复制的内容,若复制的不是文本内容则是空字符串
1 | if(checkAuth()){ |
write方法
write
可以将任意数据写入剪贴板,可以是文本数据,也可以是二进制数据
接受一个ClipboardItem
实例作为参数,表示写入剪贴板的数据。
1 | const write = async ()=>{ |
chrome只支持写入png格式的图片
writeText方法
writeText
方法用于将文本内容写入剪贴板。
1 | const write = async ()=>{ |
Document.execCommand()
Document.execCommand()是操作剪贴板的传统方法,各种浏览器都支持。但是现在已经被弃用,为了兼容性了解了解。
document.execCommand(‘copy’)
1 | const copy = text=>{ |
document.execCommand(‘paste’)
很多浏览器已经不支持了
1 | const paste = ()=>{ |
clipboard.js
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joker's Blog!
评论