粘贴板之二维码复制

个人博客网站欢迎交流:萤火之森:https://blog.xkongkeji.com

说一点废话

复制网页上的二维码,并分享到的聊天工具中,是特别常见的功能。在网上找了很多资料,大部分都是坑。

解决思路

  • 使用 navigator.permissions api查询浏览器是否支持粘贴板操作
  • 使用fetch 请求二维码 文件流
  • 将文件流转化为blob
  • 使用navigator.clipboard.write 将文件blob写入粘贴板

未解决的问题

  • 粘贴板在不安全的环境中会有限制,可能导致复制失败。建议在https环境中使用
  • 老旧项目慎重CV,具有一定的兼容性问题

查询浏览器是否支持访问粘贴板权限

getAuthClipboard(): void {
    navigator.permissions.query({
      name: 'clipboard-write'
    }).then( async permissionStatus => {
      // permissionStatus.state 的值是 'granted'、'denied'、'prompt':
      if (permissionStatus.state === 'granted') {
         this.copyQRcode();
      } else {
        this.message.error('没有获得粘贴板读取权限');
        if (navigator.permissions.request) { 
        // 尝试请求获取,navigator.permissions.request API有些浏览器不支持
          navigator.permissions.request({ name: 'clipboard-write' });
        }
      }
    });
  }

复制二维码

  async copyQRcode() {
     const request = {
       method: 'get',
       headers: {
         'Content-Type': 'application/octet-stream;charset=UTF-8',
         'Authorization': StorageUtil.getLocalStorage('token'), //携带自己的token
       }
     };
     const data = await fetch(this.QRcode, request);
     const blob = await data.blob();
     await navigator.clipboard.write([
       new ClipboardItem({
         [blob.type]: blob
       })
     ]).catch(err => {
       this.message.error('复制失败');
     });
     this.message.success('复制成功');
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值