关于H5复制ios没有效果

问题场景:今天遇到这样一个问题,需要从后端接口获取到的值进行复制,且不能提现调用获取值,因为是一个数据列表,每个列表元素需要当场点击调用接口获取值进行复制,本来以为很简单的一个需求,当做好之后发布到线上发现ios机型无效

api:uni.setClipboardData

原因:这是iOS的安全限制,要求复制操作必须是由用户直接触发的同步操作。如果在异步回调中调用复制API,iOS会认为这不是用户直接触发的操作,从而拒绝执行。

有一个解决方法,一个降级方案

解决方法:

使用 async/await 保证在同一个事件循环中完成复制:

javascript 复制代码
async function copyContent() {
    uni.showLoading({
        title: '加载中...'
    });
    
    try {
        const content = await new Promise((resolve, reject) => {
            request({
                url: '/api/xxx',
                success: (res) => resolve(res.data),
                fail: (err) => reject(err)
            });
        });
        
        uni.hideLoading();
        
        uni.setClipboardData({
            data: content,
            success: function() {
                uni.showToast({
                    title: that.i18n.page.text24,
                    icon: 'none'
                });
            }
        });
    } catch(err) {
        uni.hideLoading();
        console.error(err);
    }
}

降级方案:点击按钮调用接口获取到值,弹出弹框,在弹框点击按钮调api复制

相关推荐
游戏开发爱好者85 小时前
基于uni-app的iOS应用上架,从打包到分发的全流程
android·ios·小程序·https·uni-app·iphone·webview
无知的前端6 小时前
一文精通- iOS隐私权限
ios·程序员·app
不自律的笨鸟7 小时前
iPhone 17 Pro 全新配色确定,首款折叠屏 iPhone 将配备 Touch ID 及四颗镜头
ios·iphone
深盾科技7 小时前
探索Swift Package Manager:全面指南
开发语言·ios·swift
vayy21 小时前
uniapp中 ios端 scroll-view 组件内部子元素z-index失效问题
前端·ios·微信小程序·uni-app
我现在不喜欢coding1 天前
为什么runloop中先处理 blocks source0 再处理timer source1?
ios·面试
骑着猪狂飙1 天前
iOS技术之通过Charles抓包http、https数据
网络协议·http·ios·https
Dolphin_海豚2 天前
charles proxying iphone
前端·ios
Magnetic_h2 天前
【iOS】内存管理及部分Runtime复习
笔记·学习·macos·ios·objective-c·cocoa·xcode
jiushiapwojdap3 天前
Flutter上手记:为什么我的按钮能同时在iOS和Android上跳舞?[特殊字符][特殊字符]
android·其他·flutter·ios