36

Android 4.2.1を実行しているデバイスを除いて、ほとんどのデバイスで完全に機能するjavascriptインターフェイスが追加されたWebビューがあります。

私はほとんどのコードを削除し、非常に基本的なコードを使用しました。

this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new WebChromeClient());
this.webView.addJavascriptInterface(new Object() {
    public void handshake() {
        Log.d("JS", "handshake no params");
    }

    public void handshake(String json) {
        Log.d("JS", "handshake with params: " + json);
    }
}, "Android");

javascript側では、テストコードは次のようになります。

Android.handshake();

しかし、私はこれをlogcatで取得します:

E / Webコンソール:キャッチされていないTypeError:オブジェクト[オブジェクトオブジェクト]にメソッド「ハンドシェイク」がありません

繰り返しますが、これとまったく同じことは、私がテストした古いandroid os(<4.2.1)(最小バージョンは2.3.3)を搭載したデバイスで正常に機能します。

奇妙なことに、まったく新しいプロジェクトを開始し、WebViewだけを含む単一のアクティビティだけで同じコードを使用すると、4.2.1でもすべてが正常に機能しますが、実際のプロジェクトの一部である場合は問題が発生します。私が提供したこのコードスニペットに含まれていないWebビューで私がしていることは何もありません。

私にとって最も奇妙なのは、JavaScriptがAndroidオブジェクトを検出したが、要求されたメソッド(ハンドシェイク)がないことです。どうすればよいでしょうか。

これは過去2週間ほど私を夢中にさせてきたので、どんな助けでも大いに感謝されます(それは私がいつも戻って、それからあきらめるなどのバグです)。ありがとう。

4

2 に答える 2

96

Android 4.2 のドキュメントから:

注意: targetSdkVersion を 17 以上に設定した場合は、Web ページ コードで使用できるようにするメソッドに @JavascriptInterface アノテーションを追加する必要があります (メソッドもパブリックである必要があります)。アノテーションを指定しないと、Android 4.2 以降で実行しているときに Web ページからメソッドにアクセスできなくなります。

于 2013-01-04T10:15:21.467 に答える