uni-app navigateBack在安卓端webview无效
uni-app navigateBack在安卓端webview无效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 11 | HBuilderX |
操作步骤:
- uniapp打包成H5,用安卓app的内置webview打开,使用uni.navigateTo跳转页面,然后自定义导航栏的返回按钮调用uni.navigateBack
预期结果:
- 可以正常回退到上一级页面
实际结果:
- 没有回退到上一级页面
bug描述:
- uni.navigateBack执行成功,走的是success回调,页面堆栈也是有2个的。但是执行成功后,页面没有回退。在手机系统浏览器,iOS端app内置webview都是表现正常的
更多关于uni-app navigateBack在安卓端webview无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
非 uniapp问题,与用户排查使用了在原生安卓的 webview 中使用了某些方法导致webview拦截返回操作导致
更多关于uni-app navigateBack在安卓端webview无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
能具体说一下哪些方法导致的吗?我也遇到了同样的问题
回复 用户2859488: 可以看一下是不是原生的代码有拦截backpress之类的操作
回复 DCloud_UNI_yuhe: 非必现,偶现,第一次打开webview出现的机率很大,出现一次后就好用了
回复 DCloud_UNI_yuhe: 发现个规律,只会在第二个页面返回第一个页面时有这个问题,之后无论再进入多少层都能正常back回去
回复 用户2859488: 那就是只拦截了第二页
能够提供一下一个可以复现的项目吗?
安卓端的app也要提供吗
这是一个典型的安卓WebView历史记录管理问题。在安卓WebView中,history.back()的行为可能与系统浏览器不同,特别是当页面通过JavaScript进行路由跳转时。
解决方案:
- 检查页面堆栈状态
console.log(getCurrentPages()) // 确认页面堆栈确实存在两个页面
- 使用替代方案
// 方案1:尝试使用window.history
if(history.length > 1) {
history.back()
} else {
uni.navigateBack()
}
// 方案2:强制指定delta值
uni.navigateBack({
delta: 1
})
- WebView配置优化 如果是自己集成的WebView,需要在安卓端配置:
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
-
H5路由模式检查 确保使用的是hash路由模式,因为安卓WebView对history模式支持可能不完善。
-
降级处理
// 最终兜底方案
setTimeout(() => {
if(!this.pageChanged) {
window.location.href = '上一页URL' // 手动指定回退地址
}
}, 300)


