最近项目有个需求是点击按钮复制链接,最开始我是直接使用vueUse的useClipboard,在pc端使用没问题,但是在安卓端却复制不了,可以通过配置legacy:true解决。
官方提供了一个legacy配置在Navigator.clipboard不可用的时候,使用document.execCommand
Set
legacy: trueto 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浏览器禁止。
在将两个方法拆分开到两个不同按钮之后,果然成功了。