这几天在开发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");
- 在网页端的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();
}
至此说明书快速生成就差不多了,想要源码的可以留言我。