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

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

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

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

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

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

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

思路很简单:

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

  2. 用自定义函数替换它。

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

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

三. 实现代码

在 App.vue 的 onLaunch 中加入以下代码:

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:解决"页面秒回首页""路由失效"等问题。

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

六. 总结

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

优点是:

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

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

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

相关推荐
裕晟资质规划1 小时前
三类资质变更报告时限差在哪?军工 15 日、集成印制 10 日
大数据·服务器·网络
轻舟技术A1 小时前
Provider 不属于 Agent 核心:rpi 的分层理由与收益
服务器·网络
拖孩1 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579001 小时前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端
Hilaku1 小时前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
奇牙coding2 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!2 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
Escalating_xu2 小时前
【Linux 网络编程】TCP Socket 编程(上):从 listen、accept 到完整回显通信
linux·网络·tcp/ip
程序员老赵2 小时前
Docker 部署 Filestash:轻松搭建浏览器文件管理平台
前端·docker·开源
夏天要喝冰可乐2 小时前
给 23 万字修仙小说造个阅读站:浏览器内打包 EPUB 分页阅读 + 三主题实战
前端·产品·全栈