现象:
同一webview页面,加载完成后在小米手机上可正常返回,即canGoBack为false,直接调用super.onBackPress方法退出activity;而华为、oppo(目前已知)机型上,会出现canGoBack为true的情况,此时按下返回键会重新加载页面,用户体验很差。
分析:
1、经过debug检查,异常机型上页面加载会回调到shouldOverrideUrlLoading方法,由此判断可能是由于页面初始化发生了重定向导致的问题;
2、经过分析H5页面,发现页面加载时使用了window.location.replace方法,测试后发现在华为OV流手机上会被识别为跳转了新页面,即canGoback会返回true,造成返回时重复加载页面的问题。
解决方案:
1、让H5大佬修改下实现,避免使用replace(废话)
2、在onBackPress中判断当前加载的url和webview初始化时的url是否一致,如一致即代表目前实际处在顶层页面,不调用goback方法即可。