Safari剪贴功能实现踩坑

1,494 阅读1分钟

最近项目有个需求是点击按钮复制链接,最开始我是直接使用vueUse的useClipboard,在pc端使用没问题,但是在安卓端却复制不了,可以通过配置legacy:true解决。

官方提供了一个legacy配置在Navigator.clipboard不可用的时候,使用document.execCommand

Set legacy: true to keep the ability to copy if Clipboard API is not available. It will handle copy with execCommand as fallback.

Safari对useClipboard的demo是可以正常操作的,但是Safari在我们项目就算配置了legacy:true仍然没效果。

在Safari环境下对useClipboard源码调试时发现抛出了一个异常:

NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission

项目复制逻辑是点击复制按钮->发送获取url请求->复制到剪贴板 Demo复制逻辑是先输入文本到input框->点击复制按钮->复制到剪贴板

由此推断可能是因为异步链式调用copy方法导致请求被Safari浏览器禁止。

在将两个方法拆分开到两个不同按钮之后,果然成功了。

参考链接

  1. Navigator.clipboard
  2. document.execCommand