js调用原生方法
设置WebView支持JavaScript
//设置WebView支持JavaScript
mWebView.getSettings().setJavaScriptEnabled(true);
在js中调用本地java方法
//在js中调用本地java方法 "jsApi"表示通过给js调用的对象名
mWebView.addJavascriptInterface(new JsInterface(this), "jsApi");
定义JsInterface
JsInterface中的方法与前端小伙伴一起定义
private class JsInterface {
private Context mContext;
public JsInterface(Context context) {
this.mContext = context;
}
//在js中调用window.jsApi.show(name),便会触发此方法。
@JavascriptInterface
public void show(String name) {
Toast.makeText(mContext, name, Toast.LENGTH_SHORT).show();
}
//在js中调用window.jsApi.test(name),便会触发此方法,返回一个字符串。
@JavascriptInterface
public String test(String str){
String bbb = "大哥你好";
return bbb;
}
/**在js中调用window.jsApi.testCallback(fnName,prames),便会触发此方法。
*prames为json字符串,通过Gson解析。
*fnName为一个方法名,需要调用js中的方法
*/
@JavascriptInterface
public void testCallback(String fnName,String prames){
JsonObject jsonObject = new JsonParser().parse(prames).getAsJsonObject();
String name = jsonObject.get("name").getAsString();
String age = jsonObject.get("age").getAsString();
System.out.println(name+"++++++++++++++");
System.out.println(age+"++++++++++++++");
Map<String,String> map = new HashMap<String, String>();
map.put("name","大哥");
map.put("age","122");
String jsonString = new Gson().toJson(map);
mWebView.loadUrl("javascript:"+fnName+"('" + jsonString + "')");
}
}
原生调用js方法
在java中调用js方法
//调用js中的函数:jsname(prames)
webView.loadUrl("javascript:jsname('" + prames + "')");
解决:Android出现All WebView methods must be called on the same thread.
新版的Android的SDK要求在创建WebView所在的线程中操作它,在其它线程中操作它都会报这个错误。
RefreshActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
//若是需要参数,则将参数定义为全局参数
webview.loadUrl("http://www.lanhusoft.com");
}
});
RefreshActivity就是webview所在的Activity。
webview是通过webview = (WebView) findViewById(R.id.webViewName);获取到的对象实例。
网友评论