5

musli-yogurt-with-blueberries-picjumbo-com-min.jpg

⭐️ 更多前端技术和知识点,搜索订阅号 JS 菌 订阅

长时间我们一直在使用 document.execCommand 来与剪切板做交互,尤其是基本上都在使用 clipboard.js 这个库,其基本原理也是插入 DOM 树中一个隐藏的 textarea 元素,然后将要复制的文本写入到 textarea 元素中,最后调用 textarea 的 select 方法和 document.execCommand('copy') 方法,然后删除 textarea 元素

虽说 execCommand 能够一定程度上解决浏览器兼容问题:

20190327112644.png

即便是使用一个简单的剪切板都这么费劲需要一个第三方库,而且剪切板的这种方法是同步的。同步方法交互剪切板的阻塞、有限的访问权限、跨浏览器体验不一致、对多种数据类型的支持有限等问题解决起来也是麻烦。

这里有篇文章讲述到底该如何用 JS 操作剪切板:https://www.lucidchart.com/te...

🎉 无论如何,异步剪切板 Async Clipboard API 这个 API 在 Chrome 66 版本以上得到了支持:

我们可以在新版本中使用这个异步版本的剪切板,那么具体该如何使用这个 API 呢

权限

使用这个 API 当然是需要获取权限的,我们可以使用 PaymentRequest 这个 API 来监听是否拥有这个权限:

对应的有两个 query 查询条件:

{ name: 'clipboard-read' }
{ name: 'clipboard-write' }

读取剪切板

调用 clipboard 对象下的 readText 方法即可 💡

navigator.clipboard.readText().then(console.log)

写入剪切板

navigator.clipboard.writeText(+new Date())

上面的代码每次刷新页面都会写入最新时间戳

另外还有 read 和 write 方法,但浏览器没有实现,可以读取或写入其他类型格式的数据

JS 菌公众账号

请关注我的订阅号,不定期推送有关 JS 的技术文章,只谈技术不谈八卦 😊


JS菌
6.4k 声望2k 粉丝