Android WebViewとJavaScriptの相互作用【経典】
10010 ワード
Android WebViewとJavaScriptがインタラクティブNovember 21、2015
https://mthli.github.io/Android-WebView-JavaScript
最近はWebViewに関する仕事をしていますが、JavaScriptとのインタラクティブな操作が含まれています.多くのブログを検索しています.文章があまりよくないと感じて、多くの時間をかけてやっと分かりました.ここで改めてまとめてみます.皆さんのために役に立つと思います.
操作の前提
私たちの目標はJavaScriptと対話することですので、
WebViewでJavaScriptを呼び出す方法
JavaScriptを呼び出すだけの方法であれば、そのまま
注意したいのは、呼び出しです.
JavaScriptにパラメータを渡す
まず注意しなければならないことは、JavaScriptは弱いタイプです.だから、Javaから伝達されるパラメータについては、JavaScriptで自分で処理する必要があります.
文字列形式のパラメータには、シングルクォーテーションマークを使用することを必ず覚えてください.
この以外にもピットに注意が必要です.もしJavaScriptに伝達したい文字列には
残りのことは簡単です.例えばJavaScriptにはこのような方法があります.
JavaScriptで関連するJavaメソッドを呼び出すには、WebViewの設定が必要です.
まず、WebViewにJavaScriptを追加して直接に呼び出すことができるインターフェースが必要です.便宜上、私は直接にWebView全体をインターフェースオブジェクトとして
次に、JavaScriptが起動できるすべてのJava方法に
あなたのJavaScriptコードからJavaメソッドを呼び出すことができます.全体コードは大体このように見えます.
多くの場合、JavaScriptは一つの方法を実行するだけではなく、リターン値、例えばブール値、または文字列を取得したいです.
Android 4.4およびそれ以上のバージョンでは、GoogleはWebViewに
もちろん、簡単で低バージョンのAndroidに対応する方法を使ってもいいです.たとえば私たちは
UIレベルの変更について
Androidは、メインスレッドでのみUIの変更を許可します.JavaScriptでWebViewの方法を呼び出してインタフェースを修正したら、JavaBridgeはメインスレッドにないので、メインスレッドにあるHandlerを新たに作ってUIを操作します.
もしあなたがAndroid 4.4とそれ以上のバージョンのWebViewを使っているなら、これは非常に有用な機能であり、具体的にはこのリンクを参照することができます.
上記の文章について不明な点があれば、Googleの公式文書を参照してください.
戻る
https://mthli.github.io/Android-WebView-JavaScript
最近はWebViewに関する仕事をしていますが、JavaScriptとのインタラクティブな操作が含まれています.多くのブログを検索しています.文章があまりよくないと感じて、多くの時間をかけてやっと分かりました.ここで改めてまとめてみます.皆さんのために役に立つと思います.
操作の前提
私たちの目標はJavaScriptと対話することですので、
webView.getSettings().setJavaScriptEnabled(true);
もちろん必要です.WebViewでJavaScriptを呼び出す方法
JavaScriptを呼び出すだけの方法であれば、そのまま
webView.loadUrl("javascript:METHOD")
を使用することができます. を実装し、METHOD
あなたが望むJavaScriptの方法です.直接ChromeでF 12を押してコンサートに入ります.注意したいのは、呼び出しです.
loadUrl()
4.4以前のWebViewでは、ウェブページの重載(4.4以降は目立った影響はない)につながりますが、ウェブページの重載によりソフトキーボードの入力焦点が消失するなどの問題があります.JavaScriptにパラメータを渡す
まず注意しなければならないことは、JavaScriptは弱いタイプです.だから、Javaから伝達されるパラメータについては、JavaScriptで自分で処理する必要があります.
文字列形式のパラメータには、シングルクォーテーションマークを使用することを必ず覚えてください.
'
それを包んでください.さもなければ、JavaScriptはこの文字列を解析できなくなり、定義されていないことをヒントを与えます.この以外にもピットに注意が必要です.もしJavaScriptに伝達したい文字列には
\
が含まれています. または %5C
の串はいずれもJavaScriptの中の転義を招くので、私達は正しいです. \
または %5C
処理を行う.たとえば \
文字列を置き換えることができます. \\
,に対する \\
私たちに本当に必要なものに変えられます. \
. 残りのことは簡単です.例えばJavaScriptにはこのような方法があります.
// HTML
function insertHTML(html) {
...
}
WebViewではこのように呼びます.String html = ...;
html = html.replaceAll("\\\\", "\\\\\\\\");
webView.loadUrl("javascript:insertHTML('" + html + "')");
JavaScriptはJavaメソッドを呼び出します.JavaScriptで関連するJavaメソッドを呼び出すには、WebViewの設定が必要です.
まず、WebViewにJavaScriptを追加して直接に呼び出すことができるインターフェースが必要です.便宜上、私は直接にWebView全体をインターフェースオブジェクトとして
addJavascriptInterface()
に伝えます. の中で、同時にインターフェースの対象に名前をつけることを覚えます.次に、JavaScriptが起動できるすべてのJava方法に
@JavascriptInterface
を追加します. のコメントあなたのJavaScriptコードからJavaメソッドを呼び出すことができます.全体コードは大体このように見えます.
public class MyWebView extends WebView {
public MyWebView(Context context) {
...
getSettings().setJavaScriptEnabled(true);
addJavascriptInterface(this, "MyName");
...
}
@JavascriptInterface
public void example() {
...
}
}
JavaScriptにはこう書かれています.// MyWebView example()
function example() {
MyName.example();
}
JavaScriptの戻り値を取得します.多くの場合、JavaScriptは一つの方法を実行するだけではなく、リターン値、例えばブール値、または文字列を取得したいです.
Android 4.4およびそれ以上のバージョンでは、GoogleはWebViewに
evaluateJavascript()
という名前のものを提供しています. この方法は、JavaScriptメソッドの実行が完了すると、フィードバック値の文字列形式が生成されますので、自分で手動で必要なタイプに変換する必要があります.具体的な例は、このリンクを参照することができる.もちろん、簡単で低バージョンのAndroidに対応する方法を使ってもいいです.たとえば私たちは
MyWebView
には次のような方法があります.@JavascriptInterface
public void log(String tag, boolean value) {
Log.v(tag, String.valueOf(value));
}
JavaScriptにはこう書かれています.function log() {
MyName.log("tag", true);
}
JavaBridgeは自動的にパラメータを必要なタイプに変換します.もちろん、変換が正確であることを保証します.UIレベルの変更について
Androidは、メインスレッドでのみUIの変更を許可します.JavaScriptでWebViewの方法を呼び出してインタフェースを修正したら、JavaBridgeはメインスレッドにないので、メインスレッドにあるHandlerを新たに作ってUIを操作します.
public class MyWebView extends WebView {
private Handler handler = new Handler(Looper.getMainLooper());
...
@JavascriptInterface
public void changeUI() {
handler.post(new Runnable() {
...
});
}
}
ChromeリモートデバッグもしあなたがAndroid 4.4とそれ以上のバージョンのWebViewを使っているなら、これは非常に有用な機能であり、具体的にはこのリンクを参照することができます.
上記の文章について不明な点があれば、Googleの公式文書を参照してください.
戻る