WebChromeClientで使える関数のまとめ

前回WebViewClientの関数をまとめましたが、今回はWebChromeClientをまとめました。

WebViewClientに関しては、主に通信の関数が多かったのですが、WebChromeClientは、主に、JavaScriptとの連携などが多いです。

 


■getDefaultVideoPoster()
When not playing, video elements are represented by a ‘poster’ image.

上記は、videoタグの対応をする為にposter属性と言うのが存在します。
poster:映像データが利用不可能な場合に表示される画像データを URI 形式で指定します。

cf:https://developer.mozilla.org/Ja/HTML/Element/Video

と言う事なので、設定されている場合もあるようですが、存在しない場合には、こちらでデフォルトのものを表示できます。
その為のデータです。

cf:android-group-japan

 

■getVideoLoadingProgressView()
When the user starts to playback a video element, it may take time for enough data to be buffered before the first frames can be rendered.

これは値としてviewを返すのだが、Viewを返すのみで、ここで進捗に対しての対応をする事はできない。

cf:android-group-japan

 

■getVisitedHistory(ValueCallback<String[]> callback)
Obtains a list of all visited history items, used for link coloring

ユーザーがクロールした、データを一通り取得ができる。
不確かですが、更新されるタイミングで発行できるような。

 

■onCloseWindow(WebView window)
Notify the host application to close the given WebView and remove it from the view system if necessary.

window.close()が実行された場合などに、実行される関数。基本的には、window.openなどで作成したエリアに関して実行をする。

 

■onConsoleMessage(String message, int lineNumber, String sourceID)
This method is deprecated. Use onConsoleMessage(ConsoleMessage) instead.
■onConsoleMessage(ConsoleMessage consoleMessage)
Report a JavaScript console message to the host application.

コンソールの表示をしてくれるらしいので、実機でのみバグが発生する時に使用かな?と思います。

尚、APIレベル7で提供されている onConsoleMessage(String, int, String) は、APIレベル8ではonConsoleMessage(ConsoleMessage) となり、非推奨となりました。
cf:http://d.hatena.ne.jp/lionas/20110104/1294067233

 

■onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
Request the host application to create a new Webview.

新しいウインドウを開こうとした場合に利用をします。
開く予定のデータなどを用いて、表示を行う事ができるので、次のように別のwebViewを作るなどの対応が可能です。

google codesearch
ですが、渡す先の新しいwebViewをどのように設定をするかを決めます。

@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture,Message resultMsg) {
 WebView childView = new WebView(getActivity());
 final WebSettings settings = childView.getSettings();
 settings.setJavaScriptEnabled(true);
 childView.setWebChromeClient(this);
 WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
 transport.setWebView(childView);
 resultMsg.sendToTarget();
 mHadOnCreateWindow = true;
 return true;
}

transportやと、sendToTargetなどを行う必要があります。結構面倒ですが、
[新しいwebViewを作成]→[transportを設定]→[sendToTargetを設定]

 

■onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
Tell the client that the database quota for the origin has been exceeded.

下記のようにweb storageを利用する場合に設定をする。
Android WebView で HTML5 の Web Storage と Web SQL Database API を使う
http://d.hatena.ne.jp/nobnak/?of=9

 

■onGeolocationPermissionsHidePrompt()
Instructs the client to hide the Geolocation permissions prompt.

GeoLocationのパーミッションが取得できない場合に実行される。
cf:http://www.saturn.dti.ne.jp/~npaka/android/webkit/index.html

 

■onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)
Instructs the client to show a prompt to ask the user to set the Geolocation permission state for the specified origin.

GeoLocationのパーミッションが取得できた場合に実行をする。
cf:http://www.saturn.dti.ne.jp/~npaka/android/webkit/index.html

 

■onHideCustomView()
Notify the host application that the current page would like to hide its custom view.

<<<使い方不明>>>
カスタムビューのつくり方がわからない。

 

■onJsAlert(WebView view, String url, String message, JsResult result)
Tell the client to display a javascript alert dialog.

javascriptのalertが呼ばれた時に実行される。
基本的には、Toastなどで代用をする。
※以前、このブログでも紹介していました。

@Override  
public boolean onJsAlert(final WebView view , final String url, final String message,JsResult result){  
 Toast.makeText(WebJs.this, message, Toast.LENGTH_SHORT).show();  
 result.confirm();  
 return true;  
}

または、下記のようにOKをおさせる仕組みでもよいのかもしれない。

public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
 new AlertDialog.Builder(context)
 .setTitle(R.string.title_dialog_alert)
 .setMessage(message)
 .setPositiveButton(android.R.string.ok,
 new AlertDialog.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
 result.confirm();
 }
 })
 .setCancelable(false)
 .create()
 .show();
 return true;
};

cf:Mosembro.java

 ※以前は設定しないと表示されなかったはずですが、現在では実装しなくてもalertDialogを表示してくれます。

■onJsBeforeUnload(WebView view, String url, String message, JsResult result)
Tell the client to display a dialog to confirm navigation away from the current page.

<<<確認中>>>
使いようがわからない。

 

■onJsConfirm(WebView view, String url, String message, JsResult result)
Tell the client to display a confirm dialog to the user.

@Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
 result.confirm();
 result.cancel();
 return true;
}

上記の形で、confirmかcancelのどちらを利用するかが重要になります。
中国語ですが。。下記が参考になりました。
cf:http://android.yaohuiji.com/archives/tag/onjsconfirm

  ※以前は設定しないと表示されなかったはずですが、現在では実装しなくてもalertDialogを表示してくれます。

■onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
Tell the client to display a prompt dialog to the user.

@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) {
 result.confirm(value);
 result.cancel();
 return true;
};

上記の形ですが、onJsPromptで、上記のようにconfirmとcancelを分けて分岐をしますが、
onJsConfirmと異なり、valueの設定をする必要があります。

Mosembro.java

  ※以前は設定しないと表示されなかったはずですが、現在では実装しなくてもalertDialogを表示してくれます。

■onJsTimeout()
Tell the client that a JavaScript execution timeout has occured.

JSのタイムアウトの際に実行されるらしい。
どういう場合にこの状況になるのかは不明

 

■onProgressChanged(WebView view, int newProgress)
Tell the host application the current progress of loading a page.

シークバーと同じ仕組みで問題ないかと思う。

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
 Log.v("onProgressChanged()",
 String.valueOf(progress) + ", " + String.valueOf(fromTouch));
}

http://www.adakoda.com/android/000128.html

ただ、ここで送られる進捗に関しては
WebChromeClient サブクラスはブラウザのUIに影響を与える可能性のある処理が起こったときに呼ばれる。例えば、アップデートの進捗や JavaScript の alerts はここに送られる。
http://y-anz-m.blogspot.com/2010/07/androidwebview.html
なのだが、ちょっと不明である。アップデータの進捗と言う事はajaxの対応かとも思うのだが。

 

■onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
Tell the client that the Application Cache has exceeded its max size.

<<<確認中>>>

 

■onReceivedIcon(WebView view, Bitmap icon)
Notify the host application of a new favicon for the current page.

<<<確認中>>>
iconがビットマップで飛んでくるっぽい

 

■onReceivedTitle(WebView view, String title)
Notify the host application of a change in the document title.

ページのタイトルを取得できるのだが、通常利用する時には、
下記のような形でもよいのかもしれない。
webview.getTitle()
上記は更新のタイミングで読み込まれるのかと思うので、
ページ遷移を繰り返す場合には、この方法で実装してあげると、
リアルタイムでページのタイトルを取得できる。

 

■onReceivedTouchIconUrl(WebView view, String url, boolean precomposed)
Notify the host application of the url for an apple-touch-icon.

<<<確認中>>>
タッチアイコンってどこに表示するものだろうか。。

 

■onRequestFocus(WebView view)
Request display and focus for this WebView.

webView.requestFocus();
上記のように設定をするとブラウザにフォーカスが当たります。
フォーカスを当てる理由としては、キーボードが出ないとか、ボタンが押せない時に利用をしたいですが。。

 

■onShowCustomView(View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback)
Notify the host application that the current page would like to show a custom View in a particular orientation.
■onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
Notify the host application that the current page would like to show a custom View.

下記のサンプルで利用をしているのだが、イマイチ使い方がわからない。。
google grope

 

以上です、。まだ、仕様を使いきっている人がそこまでいないのですが、だれか標準化webClientとか、コピペで使えるのを作ってくれたら嬉しいのにな。

前後の記事

前の記事:

次の記事:

関連の記事

コメント

:D

いい情報、ありがとうございます。
この情報を僕のブログへ持って行ってもいいですか?

どう-ぞよろしくお願いします。

:D admin

ご連絡ありがとうございます。このブログの情報を転載するのは、丸パクリみたいな形でなければ特に問題はないのですが、現状androidのバージョンが更新されていき、この部分も変化してしまっている部分もあります。(改善と言う感じで)なので、googleのリファレンスを見てさらにブラッシュアップした情報にしてブログに書いてくれたら、読みます!

:D

お返事ありがとうございます。
このブログの整理が良いんで、ただ参考のためリンクの形ではどうですか。
どうーぞご許可よろしくお願いします。

:D admin

リンクなどはご自由していただいてかまいませんよー。

:D

ありがとうございます。ww

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑