Android WebView canGoBack 始终为真

Posted

技术标签:

【中文标题】Android WebView canGoBack 始终为真【英文标题】:Android WebView canGoBack always true 【发布时间】:2012-05-24 04:08:07 【问题描述】:

我有一个正在加载社交媒体页面的 WebView。我已经重写了返回按钮来调用 WebView 上的 goBack 方法,直到 canGoBack() 返回 false。然后它调用super.onBackPressed()。问题是 Twitter 和 YouTube 使用 javascript 的方式是 canGoBack() 返回 true,除非你非常快地点击返回按钮 4 次。

我已经尝试用当前 url 检查原始 url,但页面的 url 与传入的不同。

有谁知道让后退按钮调用 WebView 的 goBack 方法,直到你开始,然后调用 super.onBackPressed

【问题讨论】:

6 年仍然没有“真正的解决方案” 【参考方案1】:

嗯,这并不理想,但您可以通过使用数组(或只是一个要增加和减少的整数)手动跟踪导航历史记录,并在每次更改时将当前 url 推入其中,并从其中弹出最后一个 url您按下后退按钮,如果数组为空(或整数为 0),则调用 super.onBackPressed()。 要在 url 更改时执行代码,可以覆盖方法 boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) WebViewClient (link to the documentation)。 这样,网页的 javascript 就不会干扰您处理后退按钮的方式。

【讨论】:

如果用户单击相应网站上的注销按钮,此解决方案将卡住。现在你将如何跟踪返回堆栈 = 0 而不是 N 数。 注销并不一定意味着需要重置历史堆栈。这取决于您希望应用的行为方式。

以上是关于Android WebView canGoBack 始终为真的主要内容,如果未能解决你的问题,请参考以下文章

【BUG笔记】WebView返回时重复加载问题(CanGoBack返回true)

Android WebView

我如何在 GeckoView 上使用 canGoBack()

iOS开发:webview动态添加配置返回、关闭按钮(简单又完美)

android webview加载过程中按返回键返回问题

android webView 当用loadDataWithBaseURL加载本地html时如何实现后退到上一页面