uni.setClipboardData()以前好像没这个问题,今天突然发现手机浏览器调用会报错setClipboardData fail,看了之前下其他小伙伴提的相关问题,有官方回复说要https的网页加载,data是字符串,但是仍然会走fail,是不支持h5了嘛?如果不支持的话,建议修改一下文档里的兼容性吧
- 发布:2025-11-06 11:01
- 更新:2025-11-06 11:10
- 阅读:34
群山艳阳 - 前端千年菜鸡
function copyToClipboard(text) {
// 检查是否在uni-app环境
if (typeof uni !== 'undefined' && uni.setClipboardData) {
uni.setClipboardData({
data: text,
success: () => {
uni.showToast({ title: '复制成功' })
},
fail: (err) => {
// 如果uni API失败,使用备用方案
fallbackCopy(text)
}
})
} else {
// 不在uni环境,直接使用备用方案
fallbackCopy(text)
}
}
// 备用复制方案
function fallbackCopy(text) {
// 方案1: 使用现代剪贴板API
if (navigator.clipboard && navigator.clipboard.writeText) {
navigator.clipboard.writeText(text)
.then(() => {
alert('复制成功')
})
.catch(() => {
// 现代API失败,使用传统方案
legacyCopy(text)
})
} else {
// 使用传统复制方法
legacyCopy(text)
}
}
// 传统复制方法
function legacyCopy(text) {
const textarea = document.createElement('textarea')
textarea.value = text
textarea.style.position = 'fixed'
textarea.style.opacity = '0'
document.body.appendChild(textarea)
textarea.select()
try {
const successful = document.execCommand('copy')
document.body.removeChild(textarea)
if (successful) {
alert('复制成功')
} else {
alert('复制失败,请手动复制')
}
} catch (err) {
document.body.removeChild(textarea)
alert('复制失败,请手动复制:' + text)
}
}
-
-
2***@qq.com (作者)
已试过,navigator.clipboard.writeText(现代的),document.execCommand('copy')老的,都不支持,废,只能自己自行复制了
2025-11-06 11:31
2***@qq.com (作者)
是https协议,微信内部浏览器是正常的,就是手机浏览器不行
2025-11-06 11:08