复制成功后必须手动在success回调中调用跳转api,不可自动跳转;需根据目标页类型选用uni.redirectto、uni.switchtab或uni.relaunch,并对参数进行encodeuricomponent编码。

复制成功后跳转页面,本质是「事件响应 + 路由控制」,不是自动行为,必须手动触发跳转 API。关键在于:复制操作本身不带跳转能力,你需要在 uni.copyToClipboard 的 success 回调里调用跳转方法,并选对 API —— 否则容易跳不进去、参数丢失或报错。
uni.copyToClipboard 成功后必须手动调用跳转
uni-app 没有“复制完自动跳转”的内置机制。uni.copyToClipboard 只负责写入剪贴板,返回成功/失败状态,后续逻辑全靠你补上。
- ✅ 正确做法:在
success回调中立即调用uni.navigateTo、uni.redirectTo等 - ❌ 常见错误:把跳转写在
fail里,或漏写回调,或在success外层直接调用(此时复制还没完成) - ⚠️ 注意:H5 端部分浏览器限制后台复制权限,可能走
fail分支,需降级处理
uni.copyToClipboard('https://example.com/share?id=123', {
success: () => {
uni.showToast({ title: '已复制', icon: 'success' });
// ✅ 这里才是跳转的正确位置
uni.navigateTo({ url: '/pages/share/success' });
},
fail: (err) => {
console.error('复制失败', err);
// 可选:fallback 提示或跳转错误页
}
});
跳转方式选错会导致白屏或跳转失败
从复制动作出发,跳转目标页通常是「结果页」「分享页」或「新任务页」,这类页面一般不需要返回上一页,所以 uni.navigateTo 很可能不是最优解。
- 如果目标页是普通非 tabBar 页面,且用户无需返回(如“复制成功”提示页),优先用
uni.redirectTo—— 避免栈里多一层无用页面 - 如果目标页是 tabBar 页面(如跳到「我的」页),只能用
uni.switchTab,其他 API 全部无效,且不能传参 - 如果想清空历史、强跳首页或登录页,用
uni.reLaunch,但注意它会触发所有页面的onUnload -
uni.navigateTo仅适合需要回退的场景(如复制邀请码后跳详情页再回来),但要留意 10 层栈限制
传参要注意 URL 编码和长度限制
复制内容常含特殊字符(如 &、=、空格、中文),若直接拼进跳转 URL,会导致参数解析错乱或截断。
- ✅ 必须对参数值做
encodeURIComponent,尤其是动态内容 - ❌ 不要手动拼接
?a=1&b=2,应构造对象后编码 - ⚠️ iOS App 端对 URL 长度敏感,超长可能静默失败;H5 端也有约 2048 字符限制
const inviteCode = 'ABC#2026-好链接';
uni.copyToClipboard(inviteCode, {
success: () => {
// ✅ 安全拼接
const url = `/pages/share/result?code=${encodeURIComponent(inviteCode)}`;
uni.redirectTo({ url });
}
});
App 端唤起并跳转需额外处理 scheme
如果你的复制内容是自定义 URL Scheme(如 myapp://pages/goods/detail?id=888),用户粘贴到 Safari 或微信里点击,会唤起 App 并跳转。但这和「复制后立即跳转」无关,属于外部拉起流程。
- 该 scheme 跳转逻辑必须在
App.vue的onLaunch和onShow中解析处理 - 不能依赖
uni.copyToClipboard的回调去执行 scheme 跳转 —— 它只写剪贴板,不触发唤起 - 真正唤起后的跳转,要用
parseScheme+uni.navigateTo或uni.redirectTo组合实现
最易被忽略的是:App 端 scheme 解析后,若目标页面路径没在 pages.json 的 pages 数组里声明,会直接白屏,且无任何错误提示。










