Nexus 7(Android 4.2.2)で、JavascriptInterfaceが動かない

WebView で JavaScript から Java のコードを呼び出すのは、簡単に実現できる。WebView を継承したクラスで、addJavaScriptInterface() メソッドを呼び出すだけだ。

addJavascriptInterface(new HogeJSObj(context, this), "hogeJSObj");

上記の例では、HogeJSObj クラスの public メソッドを JavaScript から呼び出せるようになる。HogeJSObj クラスに show() メソッドが用意されているのであれば、WebView で読み込んだ HTML/JavaScript から以下のように Java のメソッドを呼び出せる。

<a href="javascript:void(0);" onclick="javascript:hogeJSObj.show();">Click!</a>

ところが Nexus 7で、このコードが動かない。調べてみると、Android 4.2で仕様変更があったようだ。セキュリティを考慮して、@JavascriptInterface アノテーションを付加した public メソッドのみ呼び出せるようになっているという(WebView クラスの説明参照)。

For applications targeted to API level JELLY_BEAN_MR1 and above, only public methods that are annotated with JavascriptInterface can be accessed from JavaScript. For applications targeted to API level JELLY_BEAN or below, all public methods (including the inherited ones) can be accessed, …

JavaScript から呼び出したいのであれば、HogeJSObj クラスの show() メソッドは、以下のようにアノテーションをつける必要がある。

    @JavascriptInterface
    public void show() {
        ....
    }

コメントを残す

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

Time limit is exhausted. Please reload CAPTCHA.