在Android上怎样实现JAVA和JS交互

 我来答
小傻

2016-04-14 · 知道合伙人软件行家
小傻
知道合伙人软件行家
采纳数:11567 获赞数:31134
已经做过两个上架的app和两个网页项目.

向TA提问 私信TA
展开全部

 Android 的 webview 是基于 webkit 内核的,webview 中集成了js与java互调的接口函数,通过addJavascriptInterface方法,可以将Java的类注册进webkit,给网页上的js进行调用,而且还可以通过loadUrl方法是给webkit传递一个uri,供浏览器来进行解析,实现Java和js交互。

  要想运行网页上的js脚本,webview必须设置支持Javascript

Java代码  

mWebview.getSettings().setJavaScriptEnabled(true);  
  然后是设置webview要加载的网页:
    web的网页:webView.loadUrl("http://www.google.com"); 
    本地的网页:webView.loadUrl("file:///android_asset/XX.html");  //本地的存放在:assets文件夹中
  webview做完基本的初始化后我们还要要给它,加进一个回调的代理类JavaScriptInterface,并给它一个调用的名称:ncp
Java代码  
mWebView.addJavascriptInterface(new JavaScriptInterface(), "ncp");

  JavaScriptInterface可以是一个普通的Java类,类实现的方法,均可被js回调:

Java代码  

final class JavaScriptInterface {   
  
       public int callOnJs() {  
                          
          return 1000;  
       }  
   
       public void callOnJs2(String mode) {  
         //TODO  
       }  
     
  }

  Java要调用js的方法,只需知道js的方法名称即可:

Java代码  

mWebView.loadUrl("javascript:onSaveCallback()");  

 

  js 这边就更简单:

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 以上,程序就会出问题。所以尽量返回基本数据类型或者字符串。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式