android JS和webview交互

1.简介:

       android可以通过webview与html页面进行交互,只要在webview中启用JavaScript,然后通过webview.addJavascriptInterface方法就能够实现js与java方法的互相调用。但是这种方法在低版本的android系统中有安全漏洞,所以这个方法只能在高版本的系统中用,免得出现安全问题。至于低版本的系统中怎么进行交互,后面的文章再说吧。


2.具体解析:

 在java代码中,设置webview相关属性,启用JavaScript功能,绑定java方法和js

mWebView.setWebChromeClient(new WebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
//把js绑定到全局的myjs上,myjs的作用域是全局的,初始化后可随处使用
mWebView.addJavascriptInterface(js, "myjs");

 其中,代码中的js对象是一个暴露给html中JavaScript使用的方法,暴露的方法需要用@JavaScriptInterface标记

 

public class JSKit {
   private MainActivity ma;
   
   public JSKit(MainActivity context) {
      this.ma = context;
   }
   @JavascriptInterface
   public void showMsg(String msg) {
      Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show();
   }
   @JavascriptInterface
   public void say(String msg){
      System.out.println(msg);
   }
}


java代码写好了,那么我们来看看html文件怎么用

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
   function showMsg(){
      alert("hello world!");
   }
   function showMsgInAndroid(){
      myjs.showMsg('hello in android!');
   }
   function sayHaHaInAndroid(){
     myjs.say('haha');
   }
</script>
</HEAD>
<BODY>
<span>测试js使用</span>

<button id='btntest' οnclick='showMsgInAndroid()'>调用android方法</button>
<button id='btnsay' οnclick='sayHaHaInAndroid()'>sayhaha</button>
</BODY>
</HTML>

在html文件中定义了3个JavaScript方法,其中fountion showMsg()方法是JavaScript方法,弹出一个webview弹框。后面两个方法中,myjs.say  myjs.showMsg,这两个方法就对应了java方法中暴露的java方法。通过这两个方法,就能够调用java层的方法了。


java调用JavaScript方法:

btnShowInfo.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
      mHandler.post(new Runnable() {
         @Override
         public void run() {
            //调用 HTML 中的javaScript 函数
            mWebView.loadUrl("javascript:showMsg()");
         }
      });
   }
});

  代码中,通过mWebView的loadUrl方法来调用JavaScript方法,对应了html文件中的

function showMsg()

调用该方法,界面会弹出一个网页版的弹窗


JavaScript调用java方法:

<button id='btntest' οnclick='showMsgInAndroid()'>调用android方法</button>
<button id='btnsay' οnclick='sayHaHaInAndroid()'>sayhaha</button>
 在webview加载html页面后,点击上面两个按钮,调用的JavaScript的showMsgInAndroid方法,而这个方法中对应的是 myjs.showMsg,这个方法就对应了java中的方法
   @JavascriptInterface
   public void showMsg(String msg) {
      Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show();
   }


这样就实现了java,js的互相调用,可以进行简易的混合开发了。


最后上传demo链接  

链接:http://pan.baidu.com/s/1nuRFHup 密码:5rue




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值