Android WebView无法返回上一页问题排查求助
WebView无法返回上一页的问题排查与修复
核心问题:WebViewClient页面跳转处理错误
你的shouldOverrideUrlLoading方法实现存在严重问题——无论页面跳转的目标URL是什么,你都强制加载WEBVIEW_BASE_URL,这会导致WebView的页面历史栈无法正常构建。每次页面跳转都会被重置到初始页面,自然canGoBack()永远返回false,无法触发返回操作。
修复步骤
修正WebViewClient的页面跳转逻辑
替换错误的shouldOverrideUrlLoading实现,让WebView正常加载跳转目标URL:binding.webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { // 加载跳转的目标URL,而非固定的初始URL view.loadUrl(url) return true } // 兼容Android 7.0及以上版本的重载方法 override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { view.loadUrl(request.url.toString()) return true } }或者更简洁的方式,让WebView自行处理页面跳转:
binding.webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { return false } override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { return false } }可选:移除冗余的OnKeyListener
你已经通过OnBackPressedCallback处理返回键逻辑,setOnKeyListener属于重复处理,可能引发冲突,建议移除这部分代码。优化返回键处理逻辑
去掉isFocused判断,确保只要WebView有历史页面,就能触发返回:private fun handleBack() { val callback: OnBackPressedCallback = object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { if (binding.webView.canGoBack()) { binding.webView.goBack() } else { mainActivityVM.reset() activity?.finishAffinity() } } } requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback) }
验证修复效果
修改后,WebView会正确记录页面跳转的历史栈,当存在上一页时canGoBack()会返回true,此时按返回键就能正常回到上一页。
内容的提问来源于stack exchange,提问作者Anshul Tyagi
相关产品推荐
相关产品推荐

