Javaで

//进入プロンプト回调
JSBridgeWebChromeClientはWebChromeClientを拡張するパブリッククラス{
@Override
パブリックブールonJsPrompt(WebViewの表示、文字列のURL、文字列メッセージ、文字列はdefaultValue、JsPromptResult結果){
result.confirm(JSBridge.callJava(ビュー、メッセージ))。
trueを返します。
}
}

//调用ジャワ逻辑
パブリッククラスJSBridge {
...
公共の静的な文字列callJava(WebViewのWebViewの文字列uriString){
文字列methodNameの= "";
文字列クラス名=「」;
ストリングPARAM = "{}"。
文字列のポート=「」;
(!TextUtils.isEmpty(uriString)&& uriString.startsWith( "JSBridge")){もし
ウリのuri = Uri.parse(uriString)。
クラス名= URI。
PARAM = uri.getQuery()。
ポート= uri.getPort()+ ""。
文字列パス= uri.getPath()。
もし{(TextUtils.isEmpty(パス)!)
methodNameの= path.replace( "/"、 "");
}
}

//基于上面的クラス名、methodNameの和ポートパス调用对应类的方法
(exposedMethods.containsKey(クラス名)){もし
ハッシュマップの<string、方法> methodHashMap = exposedMethods.get(クラス名)。

IF(methodHashMap = NULL && methodHashMap.size()= 0 && methodHashMap.containsKey(methodNameの)!){
メソッドのメソッド= methodHashMap.get(methodNameの)。
(!メソッド= null)の場合は{
{しようと
method.invoke(ヌル、WebViewの、新しいJSONObject(パラメータ)、新しいコールバック(WebViewを、ポート));
}キャッチ(例外e){
e.printStackTrace();

}
}
}
戻りNULL;
}
}

// showToast関数に直接実装
パブリック静的ボイドshowToast(WebViewのWebViewの、JSONObjectのPARAM、コールバックファイナルコールバック){
文字列メッセージ= param.optString( "MSG");
Toast.makeText(WebViewの。 getContext()、メッセージ、Toast.LENGTH_SHORT).SHOW();
IF(コールバック= NULL){!
試し{
JSONObject JSONObject新しい新しい=オブジェクト();
object.put( "キー"、 "値");
object.put( "KEY1"、 "VALUE1");
callback.apply(getJSONObject(0、 "OK"、オブジェクト));
}キャッチ(例外E){
e.printStackTrace();
}
}
}

//プログラムとしてcallback.apply方法つまり、WebViewの経由:以下のように実装されています。JS実装loadUrlのJavaメソッドを呼び出し
、パブリッククラスのコールバックを{
プライベート静的ハンドラmHandler =新しいハンドラ(Looper.getMainLooper());
プライベート静的最終的な文字列CALLBACK_JS_FORMAT = "ジャバスクリプト:JSBridge.onFinish( '%s'は、%sで);";
プライベート文字列mPort。
プライベート弱い参照<WebViewの> mWebViewRef。

パブリックコールバック(WebViewのビュー、ストリングポート){
mWebViewRef =新しい弱い参照<>(図)。
mPort =ポート。
}

公共ボイドは(JSONObject jsonObject){適用
最終文字列をexecJs = String.Formatの(CALLBACK_JS_FORMAT、mPort、String.valueOf(jsonObject))。
(もし!mWebViewRef = NULL && mWebViewRef.get()!= NULL){
mHandler.post(新しいRunnableを(){
@Override
ます。public void実行(){
mWebViewRef.get()loadUrl(execJs);
}
});



}

 

おすすめ

転載: www.cnblogs.com/ly570/p/11291185.html