やりたいこと
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の実行結果が受け取れる。