android 4.4以下跟H5交互需要调用webview的loadUrl(javascript:方法名(参数))来实现调用js方法。如果需要网页获取返回值还需要网页调用安卓 @JavaScriptInterface 注解的方法才可以。
Android 4.4以上调用webview.evaluateJavascript(javascript:方法名(参数),new ValueCallback{
public void onReciveValue(String value){}
})来实现调用js方法,同时能够获取网页返回的数据。
需要注意的是如果单纯参数递的是json格式的字符串,网页接受到的会是json对象。例如:
String payId = jsonObj.optString("payId");
JSONObject result = new JSONObject();
result.put("payId", payId);
String s = result.toString();
String js = "javascript:" + functionName + "(" + s + ")";
mWebview.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
LogUtil.e(TAG, "getPayId onReceiveValue " + functionName);
}
});
网页接收到的是一个json对象,但苹果一般传给网页的是一个json格式的字符串,后台经常需要统一处理。这种情况下需要修改如下,此时网页收到的也会是一个json格式的字符串。
String payId = jsonObj.optString("payId");
JSONObject result = new JSONObject();
result.put("payId", payId);
String s = result.toString();
String js = "javascript:" + functionName + "('" + s + "')";
mWebview.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
LogUtil.e(TAG, "getPayId onReceiveValue " + functionName);
}
});