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

10 回复

非 uniapp问题,与用户排查使用了在原生安卓的 webview 中使用了某些方法导致webview拦截返回操作导致

更多关于uni-app navigateBack在安卓端webview无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html


能具体说一下哪些方法导致的吗?我也遇到了同样的问题

回复 用户2859488: 可以看一下是不是原生的代码有拦截backpress之类的操作

回复 DCloud_UNI_yuhe: 非必现,偶现,第一次打开webview出现的机率很大,出现一次后就好用了

回复 用户2859488: 那可能还不是一个问题,这个用户的问题必现的

回复 DCloud_UNI_yuhe: 发现个规律,只会在第二个页面返回第一个页面时有这个问题,之后无论再进入多少层都能正常back回去

回复 用户2859488: 那就是只拦截了第二页

能够提供一下一个可以复现的项目吗?

安卓端的app也要提供吗

这是一个典型的安卓WebView历史记录管理问题。在安卓WebView中,history.back()的行为可能与系统浏览器不同,特别是当页面通过JavaScript进行路由跳转时。

解决方案:

  1. 检查页面堆栈状态
console.log(getCurrentPages()) // 确认页面堆栈确实存在两个页面
  1. 使用替代方案
// 方案1:尝试使用window.history
if(history.length > 1) {
    history.back()
} else {
    uni.navigateBack()
}

// 方案2:强制指定delta值
uni.navigateBack({
    delta: 1
})
  1. WebView配置优化 如果是自己集成的WebView,需要在安卓端配置:
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
  1. H5路由模式检查 确保使用的是hash路由模式,因为安卓WebView对history模式支持可能不完善。

  2. 降级处理

// 最终兜底方案
setTimeout(() => {
    if(!this.pageChanged) {
        window.location.href = '上一页URL' // 手动指定回退地址
    }
}, 300)
回到顶部