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