如何检测WebView中的重定向何时完成?

时间:2017-02-09 13:34:19

标签: android android-webview webviewclient

我已经浏览了我在这里发现的所有相关帖子,但仍然无法使其发挥作用。 我打开带有重定向的URL的WebView(有时会有很多重定向),我想知道加载何时完成(URL加载完毕没有重定向)。

那么有什么建议吗?

我读过的每一篇文章都说覆盖了shouldOverrideUrlLoading,但无论我做什么,都不会调用onOverrideUrlLoading。

我的代码:

mWebView = (WebView) findViewById(R.id.webview);
WebSettings settings = mWebView.getSettings();
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptEnabled(true);
settings.setLoadsImagesAutomatically(true);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.setWebViewClient(new MyWebViewClient());
mUrl = "http://cdn.something.com/something.html";
//    mUrl = "https://www.google.com";
mWebView.loadUrl(mUrl);



public class MyWebViewClient extends WebViewClient {

    public MyWebViewClient() {}

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        Log.d(TAG, "WebViewClient: shouldOverrideUrlLoading");
        return false;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        Log.d(TAG, "WebViewClient: onPageStarted:  url: " + url);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        Log.d(TAG, "WebViewClient: onPageFinished: url: " + url);
        super.onPageFinished(view, url);
    }

}

谢谢

2 个答案:

答案 0 :(得分:1)

您要覆盖shouldOverrideUrlLoading中添加的新android N方法,

你必须覆盖两种方法才能使它工作(旧的方法已被弃用,新的​​方法)

 @SuppressWarnings("deprecation")
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    final Uri uri = Uri.parse(url);
    return handleUri(uri);
}

@TargetApi(Build.VERSION_CODES.N)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    final Uri uri = request.getUrl();
    return handleUri(uri);
}

参考this  ,页面加载完毕后将调用onPageFinished

答案 1 :(得分:0)

在我的情况下,WebViewClient没有显示Webview上是否有更改,我认为这与正在运行的Web有关。

我可以使用OnProgressChanged从WebChromeClient获得该信息,但我不知道这是否对人们有帮助,但这是代码:

webview.webChromeClient = object : WebChromeClient(){

        override fun onProgressChanged(view: WebView?, newProgress: Int) {
            super.onProgressChanged(view, newProgress)

            if (newProgress == 100) {
                Log.d("testing", webview.getOriginalUrl())
                Log.d("testing", webview.url)
            }
        }
    }

这样,我可以知道加载了什么以及何时完成。