3

webviewがWebページの読み込みを完了し、エラーが発生しなくなった後に関数をトリガーしたい。私の実験によると、onPageFinished()は数回トリガーされ、ほとんどの場合、onReceivedError()の前に実行されます。

では、Webページがロードされ、エラーが受信されていないことをどのように知ることができますか?

4

1 に答える 1

3

を設定し、WebViewClientそのWebViewコールバックメソッドをオーバーライドして、Webページがページの読み込みを完了したときに通知することができます。例えば

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


 }
}

これは、 webViewonPageFinished(WebView view, String url)が現在のページの読み込みを終了したときに呼び出されます。

それが役に立てば幸い :)

于 2012-11-14T13:11:24.693 に答える