Android WebView返回按钮异常:点击后退后台而非返回上一页
解决WebView返回键不返回上一页的问题
嘿,我仔细看了你的MainActivity代码,问题很明确——你的返回键逻辑现在只处理了“双击退出应用”,完全没管WebView能不能返回上一页!咱们改一下onBackPressed()方法就行,步骤超简单:
核心思路
先判断WebView有没有可返回的历史页面,如果有,就让WebView退到上一页;如果没有,再触发原来的双击退出逻辑。
修改后的代码替换
把你原来的onBackPressed()方法,替换成下面这段:
@Override public void onBackPressed() { // 先获取Cordova的WebView实例 CordovaWebView webView = this.appView; // 判断WebView是否能返回上一页(有历史记录) if (webView.canGoBack()) { // 让WebView返回上一页 webView.goBack(); return; // 直接返回,不执行后面的退出逻辑 } // 如果WebView不能返回了,再执行原来的双击退出逻辑 if (doubleBackToExitPressedOnce) { super.onBackPressed(); return; } this.doubleBackToExitPressedOnce = true; Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { doubleBackToExitPressedOnce=false; } }, 2000); }
逐行解释(怕你懵)
CordovaWebView webView = this.appView;:因为你的Activity继承自CordovaActivity,框架已经帮你初始化了WebView对象,就是appView,直接拿来用就行。if (webView.canGoBack()):检查WebView有没有浏览历史,比如你从首页点进了文章页,这时候就有历史记录,能返回。webView.goBack();:让WebView退到上一个页面,和浏览器的返回键功能一样。- 剩下的就是你原来的双击退出逻辑,只有当WebView已经到了最开始的页面(没法再返回了),才会触发这个提示。
额外注意
如果你的网站是单页面应用(比如用Vue/React做的,页面切换是前端路由,没有真正的页面跳转),那canGoBack()可能会失效,这时候需要和前端配合处理,但先试试上面的修改,90%的普通网站都能解决问题!
内容的提问来源于stack exchange,提问作者Everything Music
相关产品推荐
相关产品推荐

