Help us understand the problem. What is going on with this article?

KitKat(android4.4/SDK19)以降のloadUrlでjavascript実行エラーになる件の修正方法

More than 5 years have passed since last update.

やりたいこと

WebView#loadUrlでhtmlを読んだ後、その内容に対してjavascriptを実行したい。
例)ある部分の文字列を置換したい、など。

4.3以下まで出来た記述

mWebView.setWebViewClient(new MyWebViewClient());
mWebView.loadUrl("file:///android_asset/index.html");

private class MyWebViewClient extends WebViewClient {
  @Override
  public void onPageFinished(WebView view, final String url) {
     mWebView.loadUrl("javascript:document.getElementById('sample').innerHTML = javascript changed");
  }
}

4.4.xで実行するとエラー

I/chromium(30811): [INFO:CONSOLE(1)] "Uncaught TypeError: Cannot set property 'innerHTML' of null", source: 

おそらく、4.4以降WebViewの内部実装がchroniumに変わったため出るようになったぽい。

修正方法

SDK19以降で追加されたメソッドWebView#evaluateJavascriptを使う。

mWebView.evaluateJavascript("javascript:document.getElementById('sample').innerHTML = javascript changed", null);

第2引数にコールバックを登録すればJavascriptの実行結果が受け取れる。

le_skamba
Android/iPhoneアプリ開発者。その前はゲームプログラマをしてました。Windowsアプリも幾つか作りました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away