做小程序开发,页面跳转几乎是每天都要打交道的事。这个功能看起来不复杂,真到用的时候才发现场景五花八门:有时只是小程序内部的页面切换,有时要打开一个 H5 活动页,有时还得把用户直接送进另一个小程序。不同场景对应的实现方式完全不同,选错了不仅体验别扭,还可能被平台规则拦下。所以动手之前先想清楚要跳到哪儿,比记住几个 API 的名字更重要。
先看最常见的小程序内部跳转。微信准备了一组导航 API,分工相当明确,最常用的是 wx.navigateTo:保留当前页面,把新页面压进页面栈,用户点返回还能回到原处。从商品列表点进详情页,用的就是它。调用方式很直观,传入目标页面路径即可:wx.navigateTo({url: '../targetPage/targetPage'})。唯一要留心的是页面栈有层数上限,连续多层嵌套跳转时别太随意,栈满了,新的跳转就悄悄失效了。
如果跳转之后压根不希望用户回来——比如登录成功进入首页——wx.redirectTo 更合适,它会直接关掉当前页面再打开新页面:wx.redirectTo({url: '../targetPage/targetPage'})。wx.reLaunch 做得更绝:清空整个页面栈、关闭所有页面后再打开目标页。用户退出登录后回到登录页,走的就是这条路:wx.reLaunch({url: '../targetPage/targetPage'})。
还有一类页面要单独对待:tabBar 页面。普通导航 API 对它无效,必须换 wx.switchTab。它会跳到指定的 tabBar 页面,顺手把其他所有非 tabBar 页面都关掉,适合从活动页一键回首页这类操作:wx.switchTab({url: '/index'})。不少新手在这里栽过跟头:路径明明没写错,点击却毫无反应,查来查去才发现目标页是 tabBar 页面,API 从一开始就用错了。另外提醒一句,switchTab 的 url 不支持拼接参数,想带数据过去得另想办法,比如借助全局变量或缓存。
不想写 JS 也有办法。在页面里放一个 组件,把 url 属性设为目标路径,用户点击就能跳过去。列表页里每个条目都指向对应详情页的时候,这种声明式写法反而更清爽,光看模板就能看懂页面结构。
再说第二种场景:在小程序里打开 H5 页面。这里有个绕不开的前置步骤——配置业务域名。登录小程序管理后台,在"开发设置"里添加需要跳转的域名,再下载校验文件放到该域名的根目录下,以此证明这个域名确实归你管理。开发阶段如果图省事勾选了"不校验合法域名",上线前一定记得检查,否则跳转很可能直接失败。配置完成后,用 组件加载即可:。这个组件会自动铺满整个页面,src 可以在 js 文件里动态赋值,按活动、按渠道切换落地页都很方便,运营上很灵活。

第三种场景是跳到另一个小程序,品牌之间互相引流、自家多个小程序联动,都会用到。一种思路是 URL Scheme:在目标小程序的设置页面生成一个唯一的 Scheme,然后在当前小程序里拼出跳转链接,用户点击即可唤起。这类链接还有个额外的好处——它能放到小程序之外用,短信、邮件、H5 页面都行,点击后同样能拉起小程序,做用户召回和营销推送时经常派上用场。另一种思路是调用 wx.navigateToMiniProgram,传入目标小程序的 appId、页面路径 path,以及需要携带的 extraData。目标小程序启动时能拿到 extraData 做个性化承接,比如自动识别来源渠道、带上优惠券信息,整条转化链路就顺了。
最后补几句容易翻车的提醒。路径写错是最高频的问题,跳转前务必确认目标路径准确,并且页面已经在 app.json 里注册;跳 H5 之前,确认业务域名配置和文件校验都已完成;跳其他小程序,则要核对 appId、Scheme 等信息无误,并确认已获得相应权限。小程序的开发规范和平台政策一直在调整,以上内容只作参考——真正落地之前翻一遍最新的官方文档,永远是最稳妥的做法。

지금 로그인