73

との違いに関するこのすばらしい説明から、一方を使用する場合、もう一方を使用するべきではないようです (同じ WebView オブジェクトに対して)。WebViewClientWebChromeClient

私の理解は正しいですか?

そうでない場合、同じオブジェクトに対して と の両方WebViewClient を使用するのはいつですか? WebChromeClientWebView

同じオブジェクトに対してWebViewClient と の両方を 使用するだけで特定の目標を達成できる状況の例はありますか?WebChromeClientWebView

4

2 に答える 2

95

あなたは確かに両方を使うことができます、彼らはただ異なる機能を持っています。独自のカスタムWebViewClientを設定すると、onPageFinished、shouldOverrideUrlLoadingなどを処理できます。WebChromeClientを使用すると、Javascriptのalert()およびその他の関数を処理できます。

たとえば、独自のクラスを作成するだけです。

public class MyWebChromeClient extends WebChromeClient {
    //Handle javascript alerts:
    @Override
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result)  
{
  Log.d("alert", message);
  Toast.makeText(context, message, 3000).show();
  result.confirm();
  return true;
};
...

および/または

public class MyWebViewClient extends WebViewClient {
@Override
    //Run script on every page, similar to Greasemonkey:
public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:alert('hi')");
    }
...

ドキュメントで説明されている関数をオーバーライドしてから、クライアントをonCreateで設定します。

webview.setWebViewClient(new MyWebViewClient());
webview.setWebChromeClient(new MyWebChromeClient());
于 2011-06-25T04:37:21.220 に答える