デバッグするときはalert()使うこともある

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


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.