2***@qq.com
2***@qq.com
  • 发布:2025-11-06 11:01
  • 更新:2025-11-06 11:10
  • 阅读:34

uni.setClipboardData() 在手机浏览器报setClipboardData fail

分类:uni-app

uni.setClipboardData()以前好像没这个问题,今天突然发现手机浏览器调用会报错setClipboardData fail,看了之前下其他小伙伴提的相关问题,有官方回复说要https的网页加载,data是字符串,但是仍然会走fail,是不支持h5了嘛?如果不支持的话,建议修改一下文档里的兼容性吧

2025-11-06 11:01 负责人:无 分享
已邀请:
群山艳阳

群山艳阳 - 前端千年菜鸡

在手机浏览器报错是因为浏览器环境不支持剪贴板API。这是常见的安全限制问题。剪贴板API需要HTTPS协议

  • 2***@qq.com (作者)

    是https协议,微信内部浏览器是正常的,就是手机浏览器不行

    2025-11-06 11:08

群山艳阳

群山艳阳 - 前端千年菜鸡

uni.setClipboardData() 在某些浏览器中无法使用
微信内置浏览器有特殊限制
需要特定权限

  • 2***@qq.com (作者)

    我去做个手机浏览器的兼容方法处理一下吧

    2025-11-06 11:09

群山艳阳

群山艳阳 - 前端千年菜鸡

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 (作者)

    谢了,兄弟

    2025-11-06 11:22

  • 2***@qq.com (作者)

    已试过,navigator.clipboard.writeText(现代的),document.execCommand('copy')老的,都不支持,废,只能自己自行复制了

    2025-11-06 11:31

要回复问题请先登录注册