setWebViewClient と setWebViewClient の違いは何ですか?setWebChromeClient?
-
26-09-2019 - |
質問
違いは何ですか setWebViewClient
対 setWebChromeClient
アンドロイドでは?
解決
から ソースコード:
// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;
// SOME OTHER SUTFFF.......
/**
* Set the WebViewClient.
* @param client An implementation of WebViewClient.
*/
public void setWebViewClient(WebViewClient client) {
mWebViewClient = client;
}
/**
* Set the WebChromeClient.
* @param client An implementation of WebChromeClient.
*/
public void setWebChromeClient(WebChromeClient client) {
mWebChromeClient = client;
}
WebChromeClient を使用すると、JavaScript ダイアログ、ファビコン、タイトル、進行状況を処理できます。この例を見てください。 WebView へのalert() サポートの追加
一見すると違いが多すぎる WebViewクライアント & ウェブクロームクライアント. 。ただし、基本的には次のとおりです。HTML をレンダリングするだけで、あまり多くの機能を必要としない WebView を開発している場合は、 WebViewClient
. 。一方、(たとえば) レンダリングしているページのファビコンをロードしたい場合は、 WebChromeClient
をオブジェクトにしてオーバーライドします onReceivedIcon(WebView view, Bitmap icon)
.
ほとんどの場合、それらのことを心配したくない場合は...これだけでできます:
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url);
そして、WebView には (理論上は) すべての機能が (Android ネイティブ ブラウザとして) 実装されます。
他のヒント
この質問にはもう少し詳しく説明する必要があると思います。私の答えは、『Android Programming, The Nerd Ranch Guide (第 2 版)』からインスピレーションを得たものです。
デフォルトでは, WebView では JavaScript がオフになっています。常にオンにする必要はありませんが、一部のアプリではオンにする必要がある場合があります。
URL のロードは WebView を構成した後に行う必要があるため、最後に行います。その前に、呼び出して JavaScript をオンにします。 getSettings()
WebSettings のインスタンスを取得して呼び出す WebSettings.setJavaScriptEnabled(true)
. 。WebSettings は、WebView を変更できる 3 つの方法のうちの最初の方法です。ユーザー エージェント文字列やテキスト サイズなど、設定できるさまざまなプロパティがあります。
その後、WebViewClient を構成します。WebViewClient はイベント インターフェイスです。WebViewClient の独自の実装を提供することで、レンダリング イベントに応答できます。たとえば、レンダラーが特定の URL から画像の読み込みを開始するタイミングを検出したり、POST リクエストをサーバーに再送信するかどうかを決定したりできます。
WebViewクライアント オーバーライドできるメソッドが多数ありますが、そのほとんどは処理しません。ただし、デフォルトの WebViewClient の実装を置き換える必要があります。 shouldOverrideUrlLoading(WebView, String)
. 。このメソッドは、リンクを押すなどして、新しい URL が WebView に読み込まれたときに何が起こるかを決定します。あなたが真実を返すなら、あなたは「このURLを処理しないでください、私はそれを自分で処理しています」と言っています。虚偽を返す場合、「先に進んで、このURLをロードしてください、WebView、私はそれで何もしていません」と言っています。
デフォルトの実装では、先ほどと同様に、URL を使用して暗黙的インテントを起動します。しかし、これは深刻な問題になります。一部の Web アプリケーションは、最初にユーザーをモバイル バージョンの Web サイトにリダイレクトします。デフォルトの WebViewClient を使用すると、ユーザーのデフォルト Web ブラウザに即座に送信されることになります。これはまさにあなたが避けようとしていることです。修正は簡単です。デフォルトの実装をオーバーライドして false を返すだけです。
WebChromeClient を使用して状況を整える独自の WebView を作成するのに時間を費やしているので、プログレス バーを追加し、読み込まれたページのタイトルでツールバーのサブタイトルを更新することで、少し工夫してみましょう。
ProgressBar を接続するには、WebView で 2 番目のコールバックを使用します。 WebChromeClient
.
WebViewClient は、レンダリング イベントに応答するためのインターフェイスです。WebChromeClient は、ブラウザ周辺のクロムの要素を変更するイベントに反応するためのイベント インターフェイスです。これには、JavaScript アラート、ファビコン、そしてもちろん読み込みの進行状況や現在のページのタイトルの更新が含まれます。
接続してください onCreateView(…)
. 。WebChromeclientを使用して、進行状況の更新とタイトルの更新を備えています。onProgressChanged(WebView, int)
そして onReceivedTitle(WebView, String)
. 。あなたが受け取る進捗状況 onProgressChanged(WebView, int)
は 0 ~ 100 の整数です。100の場合、ページが読み込まれていることがわかっているため、可視性を設定することでProgressBarを非表示にします View.GONE
.
免責事項: この情報は Android プログラミングから取得したものです。Big Nerd Ranch ガイドは著者の許可を得ています。この本の詳細またはコピーの購入については、bignerdranch.comをご覧ください。