WebViewとjsが交互に出会う問題

1174 ワード

1.WebViewでjsを呼び出し、4.4(target=19)までに、一つの方法しかない:
     Jsメソッドtestを呼び出します()
     
webView.loadUrl(javascript:test);
     なお、非UIスレッドで起動するとエラーが発生する可能性があります.だから、普通はこのように呼びます.
    handler.post(
          new Runnable() {
               webView.loadUrl("javascript:test()");
          }
     );
2.
evaluate Javacript()メソッドはjsを呼び出します.
4.4以降のバージョンでは、最初の方法を採用すると問題が発生します.理論的には、loadUrl()方法は単一行jsの実行のみをサポートしていますが、target=19以降はこの方法が機能しない可能性があります.以下の方法でjsを実行しなければなりません.
      webView.evaluateJavascript("test()", new ValueCallback() {                     
            @Override
            public void onReceiveValue(String arg0) {
                           
           }
      });
     同様に
evaluate Javascript()方法もUIのメインスレッドで実行しなければなりません.
3.
@JavacriptInterfaceコメント
httml 5アプリケーションを作成するには、jsコードでjavaの関数にアクセスする必要があります.WebViewのaddJavascript Interface()関数を使用します.安全問題のため、target=17及び以上の場合は@Javascript Interfaceの注釈を持つ関数にしかアクセスできません.以前は、どのpublicの関数もjsコードにアクセスできました.その中のget Class関数もアクセスできます.そして、jsは反射によって他のいくつかのコンテンツにアクセスできます.この注釈を導入することにより、jsではこの注釈がある関数にしかアクセスできず、安全性を高めることができる.