android - 任何跟踪wv.canGoBack()的webview历史的方法?

时间:2014-07-07 20:46:29

标签: android webview

有没有办法可以拥有自己的webview历史堆栈?

听起来我webview.canGoBack()stack.peek()相似,而webview.goBack()stack.pop()相似。我想有一种方法来创建我自己的堆栈来保存webview历史记录,因为我想向堆栈添加其他信息取决于当前正在查看的页面,并且此堆栈可能具有非url字符串。这就是为什么我想创建自己的自定义堆栈而不是使用本机方法。

我尝试创建stack并在调用onPageStarted时添加一条信息。然后我意识到有几个重定向会导致在页面中多次调用onPageStarted

假设我从pageA开始 - > pageB - > pageC。在pageA上发生了1次重定向,在pageB上发生了2次重定向。会发生什么是:

使用webview.goBack(),我的页面来自pageC - > pageB - > pageA的。这正是我想要的行为。

但是在使用我的自定义堆栈时,我的页面来自pageC - > pageB - > pageB-> pageB - > pageA - > pageA的

是否可以创建一个与webview.goBack()具有相同行为的自定义堆栈?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要做的是覆盖被调用的WebViewClient函数shouldOverrideUrlLoading 在加载新网址之前,它允许您查看其值。然后,您的实现可以存储所有访问过的URL:

ArrayList<String> visitedUrlStack = new ArrayList<String>();

 webview.setWebViewClient(new WebViewClient() {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
              visitedUrlStack.add(url);
              return false; // continue with loading of url!!
         }
});


您可以在程序中的任何位置查询visitedUrlStack以获取访问过的网址列表。


重要的是,您对shouldOverrideUrlLoading()的修改将返回false。这意味着 到webview,它可以继续加载网址。