Android 在webview中成功加载网页时,如何触发函数?

Android 在webview中成功加载网页时,如何触发函数?,android,webview,Android,Webview,我想在webview加载完网页并且没有收到任何错误后触发一个函数。根据我的实验,onPageFinished()将被触发数次,在大多数情况下,它将在onReceivedError()之前执行 因此,我如何知道网页已加载且未收到错误?您可以在WebView中设置WebViewClient,并覆盖其回调方法,该方法将在网页加载完毕后通知您。比如说 webView.setWebViewClient(new MyWebViewClient()); private class MyWebViewCli

我想在webview加载完网页并且没有收到任何错误后触发一个函数。根据我的实验,onPageFinished()将被触发数次,在大多数情况下,它将在onReceivedError()之前执行


因此,我如何知道网页已加载且未收到错误?

您可以在
WebView
中设置
WebViewClient
,并覆盖其回调方法,该方法将在网页加载完毕后通知您。比如说

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(); 


 }
}
当WebView加载完当前页面后,将调用此处的
onPageFinished(WebView视图,字符串url)


希望有帮助:)

有一个带有
WebView.setWebChromeClient的侦听器,并覆盖
onProgressChanged(WebView视图,int newProgress)
等待
newProgress==100
是监听load finished的另一种方式……这个newProgress==100是否保证只在onReceivedError之后出现一次?感谢您的代码,它帮助我解决了一些问题。但不幸的是,我发现这个onPageFinished()函数也会被触发至少两次。有没有任何方法可以确保只调用一次?没有,没有这样的方法可以确保在设置bool变量并根据其值编写代码后调用它。