@JavascriptInterface
11月から?
対象APIレベルが26(Android 8.0?)以上のAPKしか公開できなくなるとかで、公開中アプリを
android:targetSdkVersion="26"
を追加してリビルドした。
ビルド環境無くなってたんで再構築してやったのだが、
1個問題の生じるアプリがあってハマった。
WebViewでJavaScriptからJavaメソッドを実行する必要のあるアプリなのだが、うまく行って無い観じで、ログには
Javaメソッドが定義できてない。
JavaScriptから呼び出すJavaメソッドの前に
対象APIレベルが26(Android 8.0?)以上のAPKしか公開できなくなるとかで、公開中アプリを
android:targetSdkVersion="26"
を追加してリビルドした。
ビルド環境無くなってたんで再構築してやったのだが、
1個問題の生じるアプリがあってハマった。
WebViewでJavaScriptからJavaメソッドを実行する必要のあるアプリなのだが、うまく行って無い観じで、ログには
I chromium: [INFO:CONSOLE(45)] "Uncaught TypeError: JsObject.ChangeEdit is not a function"
が出てた。Javaメソッドが定義できてない。
import android.webkit.JavascriptInterface;
して、JavaScriptから呼び出すJavaメソッドの前に
@JavascriptInterface
アノテーションをつけたら解決した。JavaScriptからJavaメソッドを実行する方法ググってると、ほとんどの情報がpublic classのpublicメソッドを実行しているが、
今回のアプリはMainActivityの中にある内部クラスだったので、それが問題かとも思って分離も試したが関係なかった。
それで時間食った・・・
Android 4.2以上のAPIレベルをターゲットにした場合は
@JavascriptInterface
をつけたpublicメソッドしか呼び出せない模様。
Javaエラーでもないしエラー無しでビルドできちゃうから困る。
今回のアプリはMainActivityの中にある内部クラスだったので、それが問題かとも思って分離も試したが関係なかった。
それで時間食った・・・
Android 4.2以上のAPIレベルをターゲットにした場合は
@JavascriptInterface
をつけたpublicメソッドしか呼び出せない模様。
Javaエラーでもないしエラー無しでビルドできちゃうから困る。