关于ios点击分享自动复制到粘贴板的问题
前言
Android 系统没有什么特别的要求,实现这个也比较容易。但ios在某些情况下就会出现问题。
- 如果ios是点击之后,请求接口,再把接口的内容赋值给粘贴板肯定行不通,会被ios系统拦截,导致赋值失败或者赋值为空。
- 建议使用第三方库clipboard.js来实现粘贴板赋值
- 将点击的dom设置为一个button最好实现。
<!-- 辅助copy的button Android不需要被用户查看 -->
<button id="copy-share" ref="copyBtn" v-show="showBtn">Copy to clipboard
</button>import ClipboardJS from 'clipboard';const copyBtn = ref('')
const showBtn = ref(false)
const handleShareLink = async () => {// 这是一个异步函数const res = await shareLinkGenerate({...})if(res) {copyBtn.value.setAttribute('data-clipboard-text', res); // 并且将这个res的结果,赋值给这个按钮var clipboard = new ClipboardJS('#copy-share'); // 如果请求成功了 让clipboard 和按钮绑定clipboard.on('success', function(e) { // 成功的回调showSuccessToast('分享链接已复制');e.clearSelection();});clipboard.on('error', function(e) { // 和失败的回调showToast('复制失败');e.clearSelection();});//判断是不是ios系统或者苹果系列if (navigator?.userAgent?.match(/(iPhone|iPod|iPad);?/i)) {// 控制让一个按钮出现,或者弹一个按钮出来,让用户再点击这个按钮一次showBtn.value = truereturn} else {// 如果不是苹果,就可以直接赋值给剪贴板了copyBtn 就是对应的按钮const handleCopy = () => {if(copyBtn.value) {copyBtn.value.click()}}setTimeout(() => {handleCopy()},1000) }}
}