如何在Android中获得WebView的深度?

时间:2016-02-11 08:26:22

标签: android webview android-webview

我想在WebView's中获得Android对象的深度。但我无法找到,所以我使用onPageStartedonPageFinished开发。

boolean mIsInProgress = false;
int depth = 0;
mWebView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        if(!mIsInProgress) {
            depth++;
        }
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        if(mIsInProgress) {
            mIsInProgress = false;
        }
    }
});

这是点击硬件返回键时减小深度的方法。

private void moveBack(){
    if(!mIsInProgress) {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
            depth--;
        } else if (mActivity != null) {
            mActivity.finish();
        }

        mIsInProgress= true;
    }
}

首先,我认为它真的很好用。但onPageStartedonPageFinished有时间问题。

  
      
  1. WebView有1个深度。
  2.   
  3. 点击任意链接移动页面。
  4.   
  5. 后退 - >致电onPageStarted
  6.   
  7. 在调用onPageFinished之前,通过点击任意链接移动页面。 - >致电onPageStarted
  8.   
  9. 致电onPageFinished
  10.   

在3步和4步之间没有被称为onPageFinished,因此不能在4步中增加深度。 (但我需要mIsInProgress变量导致onPageStarted有时会被调用两次。)

我如何准确地获得WebView的深度?

1 个答案:

答案 0 :(得分:0)

您可以使用WebViewBackForwardList (doc)返回的WebView.copyBackForwardList()。在后退列表中,getCurrentIndex()返回历史记录列表中的当前位置,列表的大小是整体历史记录深度。