安卓 WebView 的 canGoBack 总是为真

12

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

我尝试使用当前 URL 检查原始 URL,但页面的 URL 与传递的 URL 不同。

有人知道如何让返回按钮在 WebView 上调用 goBack 方法,直到您回到开始位置,然后调用 super.onBackPressed 吗?


1
6年过去了,仍然没有“真正的解决方案”。 - Denny
2个回答

1

我有类似的问题,但在我的情况下,问题是当我重写WebViewClient的shouldOverrideUrlLoading()方法时,我检查了url是否正确,如果是,我会在我的webView中加载该url,并在此之后返回false,这是不应该做的。所以我只需返回false,它就开始正常工作了。 希望我能帮助到某个人。


0

嗯,这不是最理想的方法,但您可以通过使用数组(或仅增加和减少的整数)手动跟踪导航历史记录,并在每次更改时将当前URL推入其中,并在按下后退按钮时从中弹出最后一个URL,如果该数组为空(或整数为0),则调用super.onBackPressed()
要在URL更改时执行代码,您可以重写WebViewClientboolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)方法(文档链接)。
这样,网页的JavaScript就无法干扰您处理后退按钮的方式。


如果用户在相应网站上单击“注销”按钮,则此解决方案将被卡住。现在你如何追踪回退堆栈= 0而不是N个数字。 - Harpreet
退出登录并不一定意味着历史堆栈需要被重置,这取决于您希望应用程序如何运作。 - nonzaprej

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接