JavaScript のデバッグを行うときは、console.log()を使うけど、Android の WebView で の使い方を調べるのが面倒だったので、こんなときは alert() でしょと思ったら・・・使えませんでした。
WebView を継承したクラスで、assets ディレクトリに置いた HTML を読み込む。
public MonthlyView(Context context) {
super(context);
/** 省略 **/
WebSettings settings = getSettings();
settings.setJavaScriptEnabled(true);
/** 省略 **/
loadUrl(context.getString("file:///android_asset/view/monthly.html"));
}
HTML の中で、ふつうに alert() を呼び出す。
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
/** 省略 **/
<body onload="alert('Hello World!');">
アプリケーションを起動して、画面を表示すればアラート画面が表示されるはずなんだけど出ない。調べてみると、setWebChromeClient()しないとだめなようだ。WebView のクラスの説明に、以下のような記述があった。
Creating and setting a WebChromeClient subclass. This class is called when something that might impact a browser UI happens, for instance, progress updates and JavaScript alerts are sent here (see Debugging Tasks).
コードに以下の一行を加えればよいだけなのだけど、alert() を呼び出すためだけに設定するのもおかしな話だ。
setWebChromeClient(new WebChromeClient());
最初に戻って、console.log を調べてみる。・・・やっぱりこっちが普通の使い方でした。console.log() を呼び出すと、logcat に「Web Console」というタグで普通に出力されたのでした。