首页 > Cordova是什么?

Cordova是什么?

是一个可以把h5代码变成iOS、安卓等平台的原生应用的东西?

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

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


HTML5标准的制定,让HTML开发交互性更强更丰富的应用变得简单了,可以实现大多数Native Code才能实现的功能。但是有一点是HTML5做不到的,就是调用设备相关的API,如调用摄像头,麦克风,访问文件系统。而Cordova就是为了实现这个需求而产生的,提供了一些设备相关的API,可以直接供JavaScript调用。因此我们就可以使用HTML5技术做一个类似原生的APP。但是注意,只是类似,其实质是将我们写好的HTML,CSS,JavaScript包括其他资源文件进行打包,封装成一个类似原生的APP,而我们的HTML,CSS,JavaScript等就运行在一个WebView中,我们就可以将它安装到我们的系统中。

所以,Cordova就是这样一个工具,提供了一些设备相关API,一组JavaScript类库,并能将我们写的WebAPP打包的工具。


你只需要知道他是用来作移动端开发的就对了,http://www.ifcoder.us/这个网址上面有很多例子,你可以去看看


我又来混经验了。。。。。。

简单讲就是可以让你用丰富的前端经验写移动应用的东西。

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

  2. 不太像壳,更像是胶水,因为它不像框架一样团团包住你写的那部分内容,只是在运行在 WebView 中的 javascript 代码和原生代码之间建了一座沟通的桥梁, Ionic 这种东西才更像是壳。这个桥怎么搭下面写。

  3. 不是前端框架, bootstrap、angularjs、jqueryUI 这些是前端框架,可以和 Cordova 协作,但都不必要。

Cordova 原理

给两个链接:
- webView:shouldStartLoadWithRequest:navigationType:
public void addJavascriptInterface (Object object, String name)

第一个是 Cordova 在 iOS 上的原理,第二个是在 Android 上的原理。(不知道现在还是不是,我之前看的资料版本有点低)

第一个是 iOS 上 UIWebView 将要开始跳转地址的时候被调用,进而根据传入的地址作出反映。第二个是 Android 上用于使一个 Java 对象可以在 JS 中被访问,并调用其方法。

这就开启了两个平台上 JS 和原生代码之间的沟通窗口,这就是原理。 Cordova 在这个基础上构建了完善的一套体系,让我们可以以一种简单标准的流程写 Hybird 应用,它来负责这个 JS 与原生代码的沟通工作。

到这看得出,其实 原生代码是避不开的 ,想要利用系统的各项功能必须要写对应不同系统支持的不同语言的原生代码。但有很多写 Cordova 的程序员不懂这些也能写出东西来,靠的就是 丰富的插件

随便找一个 Cordova 插件,目录结构打开,大致是这样:

xxx@xxx:~/.../cordova-plugin-device
> tree
.
├── README.md
├── package.json
├── plugin.xml
├── src
│   ├── android
│   │   └── Device.java
│   ├── ios
│   │   ├── CDVDevice.h
│   │   └── CDVDevice.m
│   ├── ...
│   └── wp
│       └── Device.cs
└── www
    └── device.js

看到 src 文件夹底下的 ios、android、wp 这些文件夹了么,里面装的就是各个平台上的原生代码。用打包工具 build 的时候,就会对应的帮你复制到各个平台的项目文件夹去,并做好配置。

比如我写一个调用摄像头拍照片的插件,支持 android 与 iOS 两个平台,我就要针对这两个平台编写 两份 完成同样功能的原生代码,然后给一个统一的 JS 接口,由 Cordova 把这个接口暴露给写 Cordova 应用的人。他们就可以只用 JS 完成我写的插件承诺能够做到的功能,也就是拍一张照片。

也就是说 Cordova 写的应用理论上可以做到任何原生应用能做到的功能,而不是很多人误解的“局限很大”,确实是有局限,但不是局限在可能性上。

只用上面提到的两个“窗口”足以让你做到这里说的使用 JS 调用原生平台功能,但 Cordova 把这个过程简化、标准化,甚至生态化了。丰富的插件、活跃的社区还有详尽的文档,这些都极大方便了 Hybird 应用的开发过程。就好像只用 1010 可以构建整个互联网,但我们仍然需要操作系统一样。

所以真要一句话说到点上的话。。。就是可以让你用前端经验写移动应用的东西。

【热门文章】
【热门文章】