uni-app webview侧滑返回问题
uni-app webview侧滑返回问题
A页面中使用了webview内嵌h5,如果直接进入A页面,则h5无法侧滑返回上一页,但是如果先进入B页面,然后从B页面跳转到A页面,那么h5可以侧滑返回上一页。但是回到A页面后仍然可以再一次返回到B页面,这时不想侧滑返回到B页面应该如何做,因为B页面只是一个过渡页,什么内容都没有。
你好,你说的页面返回,是指的uniapp页面还是webview中的页面?
webview中的返回
这个h5是非uni开发的
回复 2***@qq.com: 这个侧滑就是按照页面栈的顺序,你这是想跳过一个栈页面返回吗?
回复 DCloud_UNI_yuhe: 因为直接进入A页面,h5后续的页面侧滑就都不生效了,所以我加了B页面,但是B页面什么都没有,所以我不希望从B页面跳转到A页面后,还能侧滑返回B页面,但其他页面还是能够侧滑返回
回复 DCloud_UNI_yuhe: 那这个有没有什么好的方案能够替换B页面啊
回复 2***@qq.com: 你是通过什么方式进入的页面 B?你试一下使用 onBackPress 能够拦截到从 A 页面的返回吗?
提供一个简单可复现的 demo 测试看看
已复现,已加分,预计下个版本修复
你好,这个问题有修复吗
回复 2***@qq.com: 下个版本
在uni-app中,webview组件的侧滑返回行为与页面栈管理相关。根据你的描述,可以通过以下方式解决:
-
在B页面跳转时使用
uni.redirectTo替代uni.navigateTo
这样会替换当前页面栈,从B跳转到A后,B页面会被销毁,侧滑返回时不会回到B。// 在B页面的跳转代码 uni.redirectTo({ url: '/pages/A/A' }); -
在A页面监听返回事件并拦截
在A页面的onBackPress中判断是否在webview内,如果是则阻止默认返回行为,改为执行webview内部返回。export default { onBackPress(options) { if (options.from === 'popGesture') { // 侧滑返回时判断webview是否可以返回 if (this.$refs.webview && this.$refs.webview.canBack()) { this.$refs.webview.back(); return true; // 阻止默认返回 } } } } -
在webview加载完成后禁用历史记录
如果H5页面不需要历史记录,可以在H5页面中禁用返回行为,或通过evalJS注入脚本清除历史:// 在A页面的webview加载完成后 onLoad() { this.$refs.webview.evalJS('history.replaceState(null, "", window.location.href)'); } -
使用
uni.reLaunch彻底重置页面栈
如果B页面完全不需要保留,可以从B跳转时使用:uni.reLaunch({ url: '/pages/A/A' });

