检测WebView何时加载其所有图像

时间:2018-10-25 06:30:21

标签: android android-webview

我正在使用WebView加载其中包含一些图像的页面。 我需要准确检测它何时完成加载和呈现页面中的所有图像。

我尝试使用“ onPageFinished” ,但是在所有图像都完全下载并可见之前,它会被调用。

“ onProgressChanged” 也是如此。

有没有一种方法可以让我知道WebView何时完全加载其所有视图和图像,并且它们在屏幕上可见??

2 个答案:

答案 0 :(得分:1)

在我的工作代码中,我正在使用下一个变体:

WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setLoadWithOverviewMode(true);

// try to use this pieсe of code 
webView.setWebViewClient(new WebViewClient() {
    public void onPageFinished(WebView view, String url) {

         // put here your code
         System.out.println("All images are downloaded and displayed");

    }
});

webView.addJavascriptInterface(this, "android");
webView.loadDataWithBaseURL(null, content, "text/html", "UTF-8", null);

答案 1 :(得分:0)

如果您有多个重定向,则可能会失败。尽管这种方法可以解决大多数问题

boolean loadingFinished = true; boolean redirect = false;

mWebView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(
            WebView view, WebResourceRequest request) {
        if (!loadingFinished) {
           redirect = true;
        }

        loadingFinished = false;
        webView.loadUrl(request.getUrl().toString());
        return true;
    }

    @Override
    public void onPageStarted(
            WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        loadingFinished = false;
        //SHOW LOADING IF IT ISNT ALREADY VISIBLE  
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        if (!redirect) {
           loadingFinished = true;
        }

        if (loadingFinished && !redirect) {
            //HIDE LOADING IT HAS FINISHED
        } else {
            redirect = false; 
        }
    }
});