uni-app 返回上两次页面异常

uni-app 返回上两次页面异常

A -> B -> C -> D -> 返回B (需求效果)

A -> B -> C -> D -> 返回A (实际效果)

页面a 进入 页面b 进入 页面c 进入 页面d,在通过uni.navigateBack({delta: 2}) 返回页面b 时,

在已知浏览器(UC浏览器、夸克浏览器)中,测试发现实际效果是返回到页面a 而非页面b,其它浏览器暂时正常

通过调用 getCurrentPages() 页面栈发现,页面栈的存储数据是正常的

8 回复

不用这么麻烦 直接在C页面 跳转D页面的时候 使用uni.redirectTo(D页面)这样C页面就消失了 D页面默认就能返回到B页面

更多关于uni-app 返回上两次页面异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


业务需求,C页面不能清除

回复 d***@163.com: 好吧 如果uni.navigateBack({delta: 2}) 在(UC浏览器、夸克浏览器)中会返回到A页面 那uni.navigateBack({delta: 1}) 会返回到那个页面?

回复 爱豆豆: 在页面d 中调用 uni.navigateBack({delta: 1}) 会回到 页面C,这个是正常的

回复 d***@163.com: 那估计是浏览器问题吧delta: 1就能正常返回 delta: 2就不行

都2024年了,这个bug还没修吗

解决了吗?

这个问题可能是由于某些浏览器对uni.navigateBack的delta参数处理存在兼容性问题导致的。建议尝试以下解决方案:

  1. 使用页面栈手动控制返回:
const pages = getCurrentPages();
uni.navigateBack({
  delta: pages.length - pages.findIndex(page => page.route === 'pages/b/b') - 1
});
  1. 或者分两次返回:
uni.navigateBack({delta: 1});
setTimeout(() => {
  uni.navigateBack({delta: 1});
}, 100);
  1. 也可以考虑使用reLaunch方式:
uni.reLaunch({
  url: '/pages/b/b'
});
回到顶部