uni-app 无法关闭复制文字时的系统震动,因其由ios触感反馈、android厂商rom或微信客户端底层控制,唯一可靠方法是引导用户手动关闭对应系统设置中的震动开关。

uni-app 本身不控制「复制文字时的系统震动」,这是操作系统或微信等宿主环境自带的行为,你无法通过 uni-app 代码关闭它。
为什么 uni-app 里关不掉复制震动
复制操作触发的震动,根本不是 uni-app 调用的 uni.vibrateShort 或 plus.device.vibrate,而是:
- iOS:系统级「选择文字 → 复制」动效自带的触感反馈(Taptic Engine),由「设置 → 辅助功能 → 触感反馈」全局开关控制
- Android:部分厂商 ROM(如小米、华为)在剪贴板操作时主动调用马达,属于系统服务行为,App 层无权干预
- 微信小程序:WebView 内复制由微信客户端接管,震动是微信自己的逻辑,
uni-app完全无访问权限
真正能干预的层级只有系统设置
如果你的目标是让用户“复制时不震”,唯一可靠路径是引导用户手动关闭系统开关:
- iOS:进入「设置 → 辅助功能 → 触感反馈」→ 关闭开关
- Android(小米):「设置 → 特殊权限设置 → 通知使用权 → [你的App] → 关闭“振动提醒”」
- Android(华为):「设置 → 应用 → 应用启动管理 → [你的App] → 通知 → 关闭“震动”」
- 微信内嵌场景:用户需进「微信 → 我 → 设置 → 新消息通知 → 关闭“震动”」,否则即使 App 内无震动,微信仍可能兜底触发一次
别踩这些坑
常见错误尝试和后果:
- 在
@click或onSelectionChange里调用uni.vibrateShort()并希望“抵消震动”——无效,系统震动早于 JS 执行,且无法被覆盖 - 试图用
document.execCommand('copy')替代原生复制来绕过震动——现代浏览器已废弃该 API,且 iOS Safari 不支持,H5 环境下基本不可用 - 以为在 manifest.json 里删掉
android.permission.VIBRATE就能禁用复制震动——没用,系统剪贴板震动不走这个权限通道 - 在条件编译里对
#ifdef MP-WEIXIN加wx.vibrateShort({ type: 'light' })想“提前震一次掩盖系统震”——反而多震一次,体验更差
归根结底,复制震动是平台层硬编码行为,uni-app 只能响应,不能拦截。想彻底静默,只能靠用户关掉那几个藏得最深的系统开关。











