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」というタグで普通に出力されたのでした。