clipboard剪贴板方法在IOS系统中异步复制失败的踩坑记录

文章讲述了在H5环境中,使用JavaScript在iOS系统下复制链接到剪贴板时遇到的问题。通过延迟执行uni.setClipboardData操作100毫秒,解决了复制失败的问题,但作者寻求更深入的理解原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

javascript实现将内容存入到剪切板时,在点击复制按钮之后,ios系统一直提示复制失败,而安卓和windows电脑上都没问题。

场景

一个H5看课考试项目,当用户在微信中打开网址进行考试时,如果检测到摄像头调用失败,则提示用户复制当前链接去其它浏览器进行尝试。此时为了实现无感登录,所以在用户点击复制按钮时,会请求接口生成一个code码附带在链接上存入剪贴板,供用户在新的浏览器中打开时换取token信息进行无感登录。

代码如下:

if (isWeixin()) {
    let that = this;
    that.$message.showModal({
        title: '温馨提示',
        content: '摄像头调用失败,请点击复制按钮到其它浏览器打开并进行考试',
        confirmText: '复制',
        confirm: () => {
            that.$http.post('/auth/share').then((res) => {
                if (res.code == 0) {
                    let code = res.data.code;
                    let url = location.href + '&code=' + code;
                    setTimeout(() => {
                        uni.setClipboardData({
                            data: url,
                            success: () => {
                                that.$message.showToast({ title: '复制成功', duration: 1000 }).then(() => {
                                    that.$Router.back();
                                });
                            },
                            fail: () => {
                                that.$message.showToast({ title: '复制失败', duration: 1000 }).then(() => {
                                    that.$Router.back();
                                });
                            },
                        });
                    }, 100);
                }
            });
        },
        cancel: () => {
            that.$Router.back();
        },
    });
 }                 

解决方案

尝试用原生方式实现以及用uni-app自带的uni.setClipboardData,但结果都不行。

最后突然想,既然是异步请求,那就将复制到剪贴板这一步的操作延迟执行,结果setTimeout函数延迟了100毫秒,果然生效了。

虽然问题解决了,但是在网上搜索为什么要延时执行复制动作,并没有很好的答案,希望有知道原因的小伙伴指点迷津。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值