- mWebview.getSettings().setJavaScriptEnabled(true);
- mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp");
- final class JavaScriptInterface {
- public int callOnJs() {
- return 1000;
- }
- public void callOnJs2(String mode) {
- //TODO
- }
- }
- mWebView.loadUrl("javascript:onSaveCallback()");
js 这边就更简单:
- <script type="text/javascript">
- window.onload = function(){
- document.getElementById('btn_1').addEventListener('click', onBtnClick, false);
- var _int_value = window.ncp.callOnJs();
- alert("get int from java:" + _int_value );
- }
- function onBtnClick() {
- window.ncp.callOnJs2("click");
- }
- </script>
Java和js交互有以下一些特点: 1.Java 调用 js 里面的函数,速度并不令人满意,大概一次一两百毫秒吧,如果要做交互性很强的事情,这种速度会让人疯掉的。而反过来就不一样了, js 去调 java 的方法,速度很快,基本上 40-50 毫秒一次。所以尽量用 js 调用 java 方法,而不是 java 去调用 js 函数。 2.Java 调用 js 的函数,没有返回值,而 Js 调用 java 方法,可以有返回值。返回值可以是基本类型、字符串,也可以是对象。如果是字符串,有个很讨厌的问题,第 3 点我会讲的。如果是对象,这个对象会被转换为 js 的对象,直接可以访问里面的方法。但是我不推荐 java 返回给 js 的是对象,除非是必须。因为 js 收到 java 返回的对象,会产生一些交换对象,而如果这些对象的数量增加到了 500 或 600 以上,程序就会出问题。所以尽量返回基本数据类型或者字符串。 3.Js 调用 Java 的方法,返回值如果是字符串,你会发现这个字符串是 native 的,不能对它进行一些修改操作,比如想对它 substr ,取不到。怎么解决呢?转成 locale 的。使用 toLocaleString() 函数就可以了。不过这个函数的速度并不快,转化的字符串如果很多,将会很耗费时间。
本文由zhiweiofli编辑发布,转载请注明出处,谢谢。