实现交互步骤:
WebView开启JavaScript脚本执行
WebView设置供JavaScript调用的交互接口。
客户端和网页端编写调用对方的代码。
js调用Java
格式为:window.jsInterfaceName.methodName(parameterValues)
Java(webView)调用JS
格式为:webView.loadUrl(“javascript:methodName(parameterValues)”)
Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。
1.Java调用js代码
String call = "javascript:sumToJava(1,2)";
webView.loadUrl(call);
2.js函数处理,并将结果通过调用java方法返回
function sumToJava(number1, number2){
window.control.onSumResult(number1+number2)
}
3.Java在回调方法中获取js函数返回值
@JavascriptInterfacepublic void onSumResult(intresult) {
Log.i(LOGTAG,"onSumResult result=" +result);
}
Android在4.4之后使用evaluateJavascript即可。
function getGreetings() {return 1;
}
java代码时用evaluateJavascript方法调用
private voidtestEvaluateJavascript(WebView webView) {
webView.evaluateJavascript("getGreetings()", new ValueCallback() {
@Overridepublic voidonReceiveValue(String value) {
Log.i(LOGTAG,"onReceiveValue value=" +value);
}});
}
注意
上面限定了结果返回结果为String,对于简单的类型会尝试转换成字符串返回,对于复杂的数据类型,建议以字符串形式的json返回。
evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。