关于在android中使用webview 和js交互

2 篇文章 0 订阅
1 篇文章 0 订阅

这几天在开发androidTV客户要求需要网页版的说明书,然后有十二国语言的,做起来比较麻烦,所以就自己想了一个快速开发的方法。实现原理和设计思路再结合加入自己的实际需求,自己写了一个本地的调用文件的代码,既与他的功能相类似又和这个方案实际贴合。
由于android应用可以通过javascript来与网页交互,而javascript为网页的脚本操作语言,就可以很好的通信。
实现的思路通过最后的流程图片就可以看出。网页版的说明书是根据先排版,然后在通过不同的需要调用不同国家语言的xml文件,就可以实现多国语言的切换。
2.使用的技术:
HTML5+javascript+XML+ android与Javascript的交互。

3.遇到的问题:
在android系统中内嵌的为谷歌浏览器内核,安全性比较高,默认不允许读取本地文件,IE浏览器有自己开发的ActiveX来加载本地文件,允许js通过ActiveX提供的方法来读取XML文件。

在谷歌浏览器中,谷歌公司一向不认同在浏览器中安装插件来使用浏览器,这会造成很多的安全问题。所以谷歌没有自己提供方法来读取本地文件。所以要使用XMLHttpRequest():方法请求文件的读取。
        

 var xmlhttp = new XMLHttpRequest() ;  
                  xmlhttp.open("GET",  xmlFile, false);  
                  xmlhttp.send(null);  
                  xmlDoc = xmlhttp.responseXML

只能通过以上的方法获取Document 对象。
var book = xmlDom.getElementsByTagName(“book”);
通过以上方法获取book节点对象集,和Java的数组类似。
4.Android的实现:
由于在android中的webview是使用的是谷歌浏览器的内核。Js脚本没有获得权限的情况下直接访问本地文件。所以谷歌浏览器器需要通过以下的代码来读取XML:

var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", this.getXmlFile(), false);

    xmlhttp.send(null);
xmlDom = xmlhttp.responseXML;

同时要在android端增加一下权限代码,这个代码的意思是允许android与javascript交互,并创建交互接口:

WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);//设置支持javascript
        webSettings.setAllowFileAccessFromFileURLs(true);
        webView.addJavascriptInterface(new JsInterface(mContext), "getlanguage");
  1. 在网页端的js代码需要调用android传过来的参数:
 window.onload = function load(){
       var parseObj = new parseXMLDOM();
       //设置文件路径
       var language2=window.getlanguage.showInfoFromJs("js成功获取");
上面是获取android传过来的参数并放回给android获取成功。
       if (language2=="chinese"){
           parseObj.setXmlFile("zh.xml");
       }else{
         parseObj.setXmlFile("en_EN.xml");
       }

       //创建XMLDOM
        parseObj.setXmlDom(parseObj.createXmlDom(null));
       //解析XMLDOM
        chapter1=parseObj.parseXMLDOMInfo();
        loadData();
}

至此说明书快速生成就差不多了,想要源码的可以留言我。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值