Uni-App 页面跳转监控实战:快速定位路由问题

一.在做 Uni-App 小程序开发时,路由跳转是很常见的操作,比如 uni.navigateTouni.reLaunch 等。但有时候,我们会遇到一些奇怪的问题:

  • 页面一打开,就莫名其妙跳回首页

  • 业务逻辑正确,但路由被拦截器或全局逻辑改写

  • 无法快速定位,到底是哪个页面或组件触发了跳转

这种时候,如果能在全局"监控"所有路由调用,就能快速找到问题源头。下面就带大家实现一个全局路由监控工具

二.原理:函数劫持(Monkey Patch)

思路很简单:

  1. 保存原始方法 ,比如 uni.navigateTo

  2. 用自定义函数替换它

  3. 在自定义函数里,先打印日志(方法名、参数、堆栈),再执行原函数。

这样,每次调用路由方法时,都会经过我们的"代理函数",相当于全局插了一层日志

三. 实现代码

App.vueonLaunch 中加入以下代码:

javascript 复制代码
onLaunch(() => {
  // 封装一个包装函数,用来代理 uni 的路由方法
  const wrap = (name: keyof typeof uni) => {
    // 保存原始方法
    const raw = (uni as any)[name]

    // 覆盖原方法
    ;(uni as any)[name] = function (...args: any[]) {
      // 打印调用信息
      console.log(`[NAV] 调用了 ${name}`, args)

      // 打印调用堆栈,方便定位调用来源
      try {
        throw new Error(`[NAV STACK] ${name}`)
      } catch (err) {
        console.warn(err)
      }

      // 调用原始方法,保持功能不变
      return raw.apply(this, args)
    }
  }

  // 批量给常见的路由方法加代理
  ;['navigateTo', 'redirectTo', 'reLaunch', 'switchTab', 'navigateBack'].forEach(wrap)
})

四. 效果演示

当某个地方调用了:

uni.reLaunch({ url: '/pages/index/index' })

控制条输出

NAV\] 调用了 reLaunch \[ { url: '/pages/index/index' }

Error: [NAV STACK] reLaunch

at App.vue:25

at routeInterceptor.ts:38

at ...

不仅能看到调用了什么方法、传了什么参数,还能追踪到具体的调用堆栈,快速定位是哪个文件写的。

五. 使用场景

  • 🔍 调试拦截器:验证是否正确拦截、是否跳错页面。

  • 🐞 排查 Bug:解决"页面秒回首页""路由失效"等问题。

  • 📊 埋点统计:统计用户真实的路由行为(可拓展上报服务器)。

六. 总结

通过简单的函数代理,我们就能轻松实现 全局路由监控

优点是:

  • 无侵入,不需要改业务代码。

  • 实时可见,能直接看到参数和调用堆栈。

  • 扩展方便,可以加日志上报、埋点统计。

相关推荐
等风来不如迎风去16 分钟前
【win11】最佳性能:fix 没有壁纸,一直黑屏
网络·人工智能
Alice-YUE33 分钟前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
Harvy_没救了34 分钟前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
汤愈韬1 小时前
NAT Server 与目的Nat
网络·网络协议·网络安全·security
2401_873479402 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络
是上好佳佳佳呀2 小时前
【前端(十一)】JavaScript 语法基础笔记(多语言对比)
前端·javascript·笔记
CDN3602 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
7ACE2 小时前
Wireshark TS | TLP 超时时间
网络·网络协议·tcp/ip·wireshark·tcpdump
之歆3 小时前
Day07_CSS盒子模型 · 样式继承 · 用户代理样式
前端·css
其实防守也摸鱼3 小时前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学