之前就使用了webview写了公司的安卓客户端 那时因为时间仓促赶着上线 没很多时间学习安卓 复杂的界面只能用html写了 而且这种混合的应用方式貌似还很流行啊 html5的很多跨平台应用大概都是这样的吧 在应用里面嵌入一个webview之类的 然后加载网页 不过对于我这样原本就是web前端的来说 是不是写这种混合式的应用有种先天的优势的 不需要像其他那些需要各种其他html整合工具和类库 开发工具类似hybird xdk 这种 或者是web前端框架 native.js nativeScript这样的
我就整理一下我所知道的要注意的点吧
一、 webview的使用
首先 webview 有几个属性很重要
1. wv_main.getSettings().setJavaScriptEnabled(true);
这个设置webview可以执行js
2. wv_main.addJavascriptInterface(new MyJsInterface(MianActivity.this),"myapp");
这个是定义js与java接口, 在js中可以使用 windows.app 调用这个new出来的对象 , 调用里面的方法 , 而且貌似只能是方法,调用不了属性,等下再具体讲这个js如何调用这个类的。
3. wv_main.setWebViewClient(new WebViewClient());
这个WebViewClient是和webview的数据加载相关的,可以重载好几个方法,比如可以这样用:
1 | wv_main.setWebViewClient(new WebViewClient() { |
具体的用法可以查一下,还有其他很多方法
4. wv_main.setWebChromeClient(new WebChromeClient());
这个WebChromeClient是和我自己感觉是应该称做为交互相关的,主要处理js的各种弹框,页面加载进度,图标favicon,title,新建窗体,关闭窗体,这样的
1 | wv_main.setWebChromeClient(new WebChromeClient(){ |
其他的方法应该用不多 就不列举了
webview主要就这几个重要的方法,其他的一些都不是很重要的就不讲了。
二、 js与anroid相互调用接口
1. js调用android
说不清楚 直接上代码 以wv_main.addJavascriptInterface(new MyJsInterface(),"myapp");
为例
1 | public class MyJsInterface{ |
这个差不多就这样
然后在js里面是这样调用的 坑超级多。。
1 | var i = window.myapp.getIndex(); |
这几个接口函数基本和普通js函数差不多 但是还是有区别!! 之前被坑掉了
1 | setTimeout(window.myapp.exit,1000); // 这个是无法执行的!!尼玛!! |
所以为了安全起见,不知道还会发生什么意料之外的东西,最好还是下面这样写吧
1 | setTimeout(function(){window.myapp.exit();},1000); |
2. android调用js
在api19 及之后 webview提供了evaluateJavascript
方法 第一个参数是需要执行的js的字符串,第二个参数是回调 用来获取这个js执行完成后返回的值
api19以下 android没有直接调用js的方法,没办法,只能这样了
js:
1 | function myFunc(){ } |
android:
1 | if(Build.VERSION.SDK_INT>Build.VERSION_CODES.JELLY_BEAN_MR2){ |
很明显 这样如果运行很长的东西还是有点奇怪的。。。 因此里面不会包含很长大语句,一般就一句函数吧。
嗯嗯 差不多就这样吧