a.不需要获取返回值
java:
webView.loadUrl("javascript:add(1 , 3)");
js:
function add(p1 , p2) {
var r = p1 + p2;
alert(r);
}
webView.setWebChromeClient(new WebChromeClient());//支持js弹出alert
b.需要获取返回值
java:
webView.evaluateJavascript("javascript:guid()", value -> {
Toast.makeText(this , "js返回的uuid == " + value , Toast.LENGTH_SHORT).show();
});
js:
function guid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
2.JS调用Android
Android需要支持Javascript,并且添加,可以不传this,我传了因为要关闭activity
webView.getSettings().setJavascriptEnabled(true);//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
...
//此处 AppInterface 即 window.AppInterface.getUserId(para); 的 AppInterface
//webView.loadUrl之后调用
webView.addJavascriptInterface(new AndroidJs(this) , "AppInterface");
AndroidJs.java
import android.app.Activity;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.widget.Toast;
public class AndroidJs {
Activity activity;
public AndroidJs(Activity activity){
this.activity = activity;
}
//js调用android关闭界面
@JavascriptInterface
public void back(String para) {
Toast.makeText(activity , para , Toast.LENGTH_SHORT).show();
Log.i("thisweb" , "para == " + para);
activity.finish();
}
//js调用android获取userid
@JavascriptInterface
public String getUserId(String para) {
Toast.makeText(activity , para , Toast.LENGTH_SHORT).show();
return "android给你userid";
}
}
需要返回值就return "xxx",不需要就不返回。定义成void方法。
js:
function back(para) {
// window.AppInterface.back("xx");
window.AppInterface.back(para);
}
function getUserId(para) {
var r = window.AppInterface.getUserId(para);
alert(r);
}
3.Android注入js并调用
注入时机只要是onpagefinished之后都可以
注入:
String jscode = "javascript:function customalert() {var b = guid();if(b){alert(b);}}";
webView.loadUrl(jscode);
调用:
webView.loadUrl("javascript:customalert()");



