html5:目前最新的html规范,w3c联盟制定,手机端主要由webkit实现规范,对用户来讲就是浏览器实现了它css
html5+:html5自己是为浏览器而生,不能支持大部分移动端的API,所谓“+”,则是对html5在移动端的扩展,“中国html5+产业联盟”规范了html5+而且实现他们,html5+是对经常使用的原生API的js封装,包括手机上的相机,陀螺仪等31个经常使用API(android和ios通用),这些是html5没有的APIhtml
native.js:native.js技术,简称NJS,是一种将手机操做系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。上面的html5+就是他的一个实现好的子集。native.js不是js框架,是技术!html5
若是说Node.js把js扩展到服务器世界,那么Native.js则把js扩展到手机App的原生世界。java
5+Runtime:native.js的运行时,至关于.net对C#,JRE对于JAVA,是一个运行环境,有把Native.js映射到java,oc代码的原生API功能,从而实现原生的调用。node
对于5+Runtime和native.js的关系能够理解成:native.js是一种语言(语法基于js),5+runtime是这语言的运行环境!jquery
html5+sdk:软件开发工具包,它和android sdk,ios sdk同样android
HTML5+ 的SDK,是把5+ runtime封装为原生SDK,它有3个用途。ios
而后:当咱们使用dcloud的mui框架作应用开发的时候web
有这么几种状况!objective-c
即浏览器级的html5+js+css,不须要打包成app,可使用mui框架里的css样式和部分js,与开发传统的wap手机页面相同,类似的其余框架有诸如:jquery mobile,amazeui等等。
这样开发只适合制做微信公众号,手机网页等等,而且只能在浏览器中使用应用,不过相比于html4已经强大很多。
须要在mui.init()以后才能使用mui这个对象,调用其中部分的js方法,为何说部分是由于。。。请往下看!
mui中有个plus对象,他不是简单的使用html5的功能,而是提供了一个叫html5+的API集,而且将他们封装在了这个plus对象中,里面有陀螺仪,map,定位,相机,文件流等等的原生功能调用接口!
plus这里面的对象就必须在mui.plusReady()之中使用,,而上面说浏览器级别的只能使用mui部分的js对象和方法就是这个缘由!若是不是用html5+,你并不须要使用plusReady方法,只须要在用mui以前mui.init()一下就能够,这也是常常有人问的mui.init()和plusReady()的区别。
mui.plusReady()是为“html5+”而生的,最终经过“html5+sdk”打包成了app级别才能使用,由于这plus对象里面的东西最终会被映射成为java(android sdk),objective-c(ios sdk)的代码,这也是native.js的技术咯!
说太多也很差理解,这些底层的实现都已经由dcloud团队领导的“中国html5+产业联盟”(社区)实现了,咱们只要知道咱们写的plus对象的js代码都会被转化为原生代码,app就能实现不少原生功能的调用。
注意:plus这些东西在浏览器级别是不支持的,因此不能够在普通浏览器中调用这个plusReady,以及plus.xxx.xxx方法等,浏览器用mui框架只是一部分可用的而已(刚刚说过了,再啰嗦一下)!
要使用html5+就要求咱们打包成app(使用html5+sdk),有5+Runtime,这样便可运行plus对象下的对象和方法,这个打包能够由hbuilder实现。(称之为:调试基座,html5+的功能要在调试基座中实现,即5+runtime)
这些都是app级别的了
彻底有这种可能,毕竟html5+是规范性的,不能什么原生API都往里面塞对吧,他实现的是基本的,经常使用的一些原生API调用,好比相机,定位,陀螺仪,文件流等等等。。。
(有31个,详细请看:http://www.html5plus.org/doc/h5p.html)
其实真正的原生语法有几十万个,提供API数不胜数,不可能一一调出来,html5+把几个经常使用的被规范化提出来而已。
要使用其余的原生语法并映射成为js就要用到比html5+更厉害的native.js了
native.js是对html5+的扩展(超集),是映射到原生代码的原理,交给原生代码去实现原生开发的功能,能够简单说成是把js代码转化为java代码了,固然java也不过是JVM虚拟机上跑的,最终还被转换了二进制,计算机编程实现就是这样一层一层往下丢的啦!
注意:native.js不是一个js框架,和node.js命名同样,是一种技术实现,专门把js映射成底层代码,或者说是js在app开发上的一种实现!就像node把js带入了服务器和系统领域同样的道理。
使用native.js须要对原生语法,api十分的了解,你至少要学过android或者ios开发,不然你只能copy别人代码也不知道为何这么写!
下面举个例子,就懂了为何你不懂原生就不能搞native.js:
function plusReady(){ // 导入Native.js须要的原生对象 Activity = plus.android.runtimeMainActivity(); BitmapFactory = plus.android.importClass("android.graphics.BitmapFactory"); StringBuffer = plus.android.importClass("java.lang.StringBuffer") Byte = plus.android.importClass("java.lang.Byte"); CompressFormat = plus.android.importClass("android.graphics.Bitmap.CompressFormat"); bBitmap = plus.android.importClass("android.graphics.Bitmap"); ByteArrayOutputStream = plus.android.importClass("java.io.ByteArrayOutputStream"); Base64 = plus.android.importClass("android.util.Base64"); //viewClass = plus.android.importClass("android.view.View"); document.getElementById("btGetCapture").disabled=""; }
看到没这是一个html5+没有的截屏功能,是经过native.js扩展实现的
里面出现了大量的importClass,写过java就明白了,这不是java在导入包吗??
是的,native.js就是实现了js导入java包,而且最终使用java的代码来实现功能
总之
参考别人作好的native.js对原生功能调用:http://ask.dcloud.net.cn/article/114
关于其它的hybrid框架开发app:http://www.360doc.com/content/15/0423/18/21412_465487870.shtml