作者:爱生活爱花落_485 | 来源:互联网 | 2023-08-20 12:56
Html中调用Android方法javawebView.addJavascriptInterface(newJsInterface(),obj);publicclassJs
- Html中调用Android方法
//java
webView.addJavascriptInterface(new JsInterface(), "obj");public class JsInterface {//JS中调用Android中的方法 和返回值处理的一种方法/***** Html中的点击事件 onclick* * @param toast*/@JavascriptInterfacepublic void showToast(String toast) {Toast.makeText(MainActivity.this, "你的商品价格是:¥"+toast, Toast.LENGTH_SHORT).show();}
}//js
function showToast(toast) { var money=toast*3;Javascript:obj.showToast(money);
}
2.Android调用JS方法无参数
//java
webView.loadUrl("Javascript:funFromjs()");//js
function funFromjs(){document.getElementById("helloweb").innerHTML="div显示数据,无参数";
}
3.Android调用JS方法有参数
//java
webView.loadUrl("Javascript:funJs('Android端传入的信息,div标签中显示,含参数')");//jsfunction funJs(msg){document.getElementById("hello2").innerHTML=msg;
}
4.Android调用JS方法有参数且有返回值处理方式1
//java
webView.loadUrl("Javascript:sum(6,6)");/**** Android代码调用获取J是中的返回值* * @param result
*/@JavascriptInterfacepublic void onSum(int result) { Toast.makeText(MainActivity.this, "Android调用JS方法且有返回值+计算结果=="+result, Toast.LENGTH_SHORT).show();} //js
function sum(i,m){ var result = i*m; document.getElementById("h").innerHTML= "Android调用JS方法且有返回值--计算结果="+result; Javascript:obj.onSum(result)
}
5.Android调用JS方法有参数且有返回值处理方式2(Android4.4以上)
//java
webView.evaluateJavascript("sumn(6,11)", new ValueCallback() {@Overridepublic void onReceiveValue(String value) {Toast.makeText(MainActivity.this, "返回值"+value, Toast.LENGTH_SHORT).show();}
});//js
function sumn(i,m){ var result = i*m; document.getElementById("hh").innerHTML= "Android调用JS方法且有返回值--计算结果="+result; return result;
}
注意:
1、Java 调用 js 里面的函数、效率并不是很高、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用了就控制不到了
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验。
注:使用的是本地的Html文件,不过在网络链接的Html文件也是可以实现的。