关于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复制

相关推荐
游戏开发爱好者88 小时前
WebSocket 抓包怎么查看内容?从握手到消息帧完整解读
网络协议·计算机网络·网络安全·ios·adb·https·udp
悟空瞎说12 小时前
# Alamofire 使用文档 完整翻译
ios
WeiAreYoung18 小时前
Flutter+iOS 实现 Live Activity
flutter·ios
2501_9160088919 小时前
Swift多环境配置:利用Scheme实现灵活的多环境管理
开发语言·ide·vscode·ios·个人开发·swift·敏捷流程
00后程序员张20 小时前
Windows / Linux / Mac 上不用 Xcode 把 IPA 上传到 App Store,upload 命令详解
android·ios·小程序·https·uni-app·iphone·webview
秦少游在淮海21 小时前
id - Android、iOS
android·ios
太子釢2 天前
用 AI 完整实现 Github 客户端:基于 KMP + SwiftUI + Compose
android·人工智能·ios
软泡芙2 天前
【iOS】 Alamofire + Moya + SwiftData 完整教程
ios
我是谁的程序员2 天前
Windows / Linux / Mac 上不用 Xcode 把 IPA 上传到 App Store,upload 命令详解
后端·ios
iFlyCai2 天前
iOS中的单例模式详解
ios·单例模式·objective-c·多线程·swift