Cordova 是什么?

初学Cordova的人,虽然了解一点点,知道Cordova是用来将html, css, js变成app的,但并不知道到底是怎么用的,原理是什么?

Q1:它是一个可以把H5代码变成iOS、安卓等原生代码的东西?

A1:它不会把你的前端页面变成 ios 原生的 objective-c 或者 android 的 java 代码,你的界面还是以网页形式呈现的, 渲染在 Android 的 WebView 或 iOS 的UIWebView 中。

Q2:它是一个封装了H5浏览器的壳?可以装在iOS、安卓等平台的app,一打开这个APP就会访问我web app的内容?

A2:不太像壳,只是在运行在 WebView 中的 javascript 代码和原生代码之间建了一座沟通的桥梁,通过它可以用js去访问原生应用。

Q3:还是一个web前端框架,用户使用手机自带浏览器访问我的web app就可以调用他手机的摄像头和麦克风?

A3:不是前端框架, bootstrap、angularjs、jqueryUI 这些是前端框架。cordova更像一个工具。

总结:

Cordova是一个工具,通过它可以将你做的html网页显示在WebView里面,而你网页中用到的JS可以通过他的API去调用原生的东西,比如照相机等。

  • Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。
  • Cordova还提供了一组统一的JavaScript类库,以及为这些类库所用的设备相关的原生后台代码。Cordova支持如下移动操作系统:iOS, Android,ubuntu phone os, Blackberry, Windows Phone, Palm WebOS, Bada 和 Symbian。
  • Cordova官网

Cordova 下的deviceready事件

Cordova框架中第一个应该掌握的就是这个deviceready事件。采用Cordova开发的应用在运行的时候,Cordova提供的通过HTML5调用Native功能并不是立即就能使用的,Cordova框架在读入HTML5代码之后,要进行HTML5和Native建立桥接,在未能完成这个桥接的初始的情况下,是不能调用Native功能的。在Cordova框架中,当这个桥接的初始化完成后,会调用他自身特有的事件,即deviceready事件。

  1. document.addEventListener('deviceready', function () {
  2. console.log('Device is Ready!');
  3. // ....your code
  4. }, false);

需要注意的是,deviceready事件是在每回读入HTML的时候都会被调用,而不只是应用启动时调用。

除了deviceready事件以外,Cordova应用在内部读取HTML代码的时候还会调用一些其他的事件。但这些并不是Cordova框架提供的事件,而是嵌入的Webview的浏览器Render引擎提供的。