user1731839
user1731839

Reputation: 125

How can I trigger a function when a webpage is successfully loaded in webview?

I want to trigger a function after webview's finished loading a webpage and received no error. According to my experiment, the onPageFinished() will be triggered several times and in most of the cases, it will be executed before onReceivedError().

So how can I know that the webpage is loaded and no error is received?

Upvotes: 3

Views: 1211

Answers (1)

Muni Mishra
Muni Mishra

Reputation: 409

You can set the WebViewClient in the WebView and Override its Callback methods which will let you know when the webpage has finished loading the page. For example

webView.setWebViewClient(new MyWebViewClient());


private class MyWebViewClient extends WebViewClient {


    @Override
    public void  onPageStarted(WebView view, String url, Bitmap favicon){
        super.onPageStarted(view, url, favicon);
        if(progess!=null){
            progess.dismiss();

        }
        progess = ProgressDialog.show(LoadUrl.this, "", "Loading please wait...");
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        super.shouldOverrideUrlLoading(view, url);
        if (Uri.parse(url).getHost().equals("callback")) {
            // This is my web site, so do not override; let my WebView load the page
             Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return false;
        }
        // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs

        view.loadUrl(url);
       return true;
    }

    @Override
    public void onPageFinished(WebView view, String url){
        super.onPageFinished(view, url);

        // Add YOUR CODE HERE 
    }

    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
     super.onReceivedError(view, errorCode, description, failingUrl);
     Toast.makeText(LoadUrl.this, "Sorry! " + description, Toast.LENGTH_SHORT).show();
   }

    @Override
 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
     super.onReceivedSslError(view, handler, error);
     handler.proceed(); 


 }
}

Here onPageFinished(WebView view, String url) will be called when webView has finished loading the current Page.

Hope it helps :)

Upvotes: 3

Related Questions