webviewがWebページの読み込みを完了し、エラーが発生しなくなった後に関数をトリガーしたい。私の実験によると、onPageFinished()は数回トリガーされ、ほとんどの場合、onReceivedError()の前に実行されます。
では、Webページがロードされ、エラーが受信されていないことをどのように知ることができますか?
を設定し、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)
が現在のページの読み込みを終了したときに呼び出されます。
それが役に立てば幸い :)