uni-app h5 页面多次跳转到相同路径的页面(链接参数不同),然后刷新页面,再点击浏览器返回按钮,页面白屏

uni-app h5 页面多次跳转到相同路径的页面(链接参数不同),然后刷新页面,再点击浏览器返回按钮,页面白屏

操作步骤:

  • h5 页面多次跳转到 相同路径的页面(链接参数不同),然后刷新页面,在点击浏览器返回按钮,页面白屏

预期结果:

  • 希望能解决一下

实际结果:

  • 希望能解决一下

bug描述:

  • h5 页面多次跳转到 相同路径的页面(链接参数不同),然后刷新页面,在点击浏览器返回按钮,页面白屏
    图1 为正常dom 图二是白屏的dom

图片

image image

信息 描述
产品分类 uniapp/H5
PC开发环境 Mac
PC开发环境版本号 10.14.6
HBuilderX类型 正式
HBuilderX版本号 3.1.18
浏览器平台 Chrome
浏览器版本 92.0.4515.159
项目创建方式 HBuilderX

更多关于uni-app h5 页面多次跳转到相同路径的页面(链接参数不同),然后刷新页面,再点击浏览器返回按钮,页面白屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

我也遇到了同样的问题,请问作者解决了吗?

更多关于uni-app h5 页面多次跳转到相同路径的页面(链接参数不同),然后刷新页面,再点击浏览器返回按钮,页面白屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的uni-app H5路由历史记录管理问题。当多次跳转到相同路径但参数不同的页面后,浏览器历史栈中会记录多个相同URL但参数不同的记录。刷新页面后,Vue Router会重新初始化,但浏览器返回时可能无法正确匹配到对应的组件状态。

解决方案:

  1. 使用uni.navigateTosuccess回调:在跳转成功后,手动修改浏览器历史记录

    uni.navigateTo({
      url: '/pages/detail/detail?id=' + id,
      success: () => {
        // 修改history state,确保每个记录有唯一标识
        history.replaceState({ 
          pageId: Date.now(),
          path: '/pages/detail/detail',
          query: { id }
        }, '', window.location.href)
      }
    })
    
  2. 配置Vue Router使用abstract模式(不推荐,会破坏浏览器原生导航):

    // main.js
    const router = new VueRouter({
      mode: 'abstract',
      routes: [...]
    })
    
  3. 监听页面显示/隐藏:在页面生命周期中强制更新

    onShow() {
      // 强制重新渲染
      this.$forceUpdate()
      // 重新获取参数
      this.loadData()
    }
    
  4. 使用uni.redirectTo替代:如果不需要保留历史记录,使用重定向

    uni.redirectTo({
      url: '/pages/detail/detail?id=' + id
    })
    
  5. 检查路由守卫:确保路由切换时组件能正确销毁和重建

    // router/index.js
    router.beforeEach((to, from, next) => {
      // 确保组件重新初始化
      next()
    })
回到顶部