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)
我如何在 GeckoView 上使用 canGoBack()