mui开发app之html5+,5+Runtime,5+sdk,native.js
说说几个名词
html5:目前最新的html规范,w3c联盟制定,手机端主要由webkit实现规范,对用户来说就是浏览器实现了它
html5+:html5本身是为浏览器而生,不能支持大部分移动端的API,所谓“+”,则是对html5在移动端的扩展,“中国html5+产业联盟”规范了html5+并且实现他们,html5+是对常用的原生API的js封装,包括手机上的相机,陀螺仪等31个常用API(android和ios通用),这些是html5没有的API
native.js:native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术。上面的html5+就是他的一个实现好的子集。native.js不是js框架,是技术!
如果说Node.js把js扩展到服务器世界,那么Native.js则把js扩展到手机App的原生世界。
5+Runtime:native.js的运行时,相当于.net对C#,JRE对于JAVA,是一个运行环境,有把Native.js映射到java,oc代码的原生API功能,从而实现原生的调用。
对于5+Runtime和native.js的关系可以理解成:native.js是一种语言(语法基于js),5+runtime是这语言的运行环境!
html5+sdk:软件开发工具包,它和android sdk,ios sdk一样
HTML5+ 的SDK,是把5+ runtime封装为原生SDK,它有3个用途。
- 使用HTML5+ SDK实现本地打包。
- 通过原生代码扩展HTML5+ runtime的功能。
- 在现有原生项目中使用HTML5+ SDK替换原有的webview,以获得更强的web增强表现。
然后:当我们使用dcloud的mui框架做应用开发的时候
有这么几种情况!
仅仅使用html5的语法:
即浏览器级的html5+js+css,不需要打包成app,可以使用mui框架里的css样式和部分js,与开发传统的wap手机页面相同,相似的其他框架有诸如:jquery mobile,amazeui等等。
这样开发只适合制作微信公众号,手机网页等等,并且只能在浏览器中使用应用,不过相比于html4已经强大不少。
需要在mui.init()之后才能使用mui这个对象,调用其中部分的js方法,为什么说部分是因为。。。请往下看!
使用html5+提供的plus对象
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+规范也不够用了
完全有这种可能,毕竟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使得开发html5 app更加接近原生,因为他可以用原生一样的语法调用原生的对象(映射)
- 要懂原生开发才能自由定义或者使用已有的API功能实现
- 个人建议是能不用native.js则不用,多用已经实现的html5+(其实这些也是native.js实现了,不过被封装好了不用自己去import什么的)
参考别人做好的native.js对原生功能调用:http://ask.dcloud.net.cn/article/114
关于其它的hybrid框架开发app:http://www.360doc.com/content/15/0423/18/21412_465487870.shtml
mui开发app之html5+,5+Runtime,5+sdk,native.js的更多相关文章
- mui开发app之cropper裁剪后上传头像的实现
在大多数app项目中,都需要对用户头像的上传,之前做web开发的时候,我主要是通过input type=file的标签实现的,上传后,使用php对图片进行裁剪,这种方式比较传统简单. 此次app开发中 ...
- mui开发app前言(一)
dcloud mui开发app前言 大一那会就听说html5快要发布了,前景无量,厉害到能写操作系统==|||(什么???蛤?) 似乎html5标准还没正式发布那会,使用hybrid模式开发app已经 ...
- mui开发app之js将base64转图片文件
之前我已经做过一个利用cropper裁剪并且制作头像的功能.如何在mui app中实现相册或相机获取图片后裁剪做头像请看另一篇博客:mui开发app之cropper裁剪后上传头像的实现 但是当时裁剪后 ...
- 利用 MUI开发app, 如何实现侧滑菜单及其主体部分上下滑动
利用mui开发APP 之侧滑菜单主内容滚动问题 MUI作为开发者常用的框架之一,其号称最接近原生APP体验的高性能前端框架.因此利用mui开发移动APP,可以为开发者提供很大的便利和接近原生的体验. ...
- mui开发app之联网应用传输数据
手机的app分为,在线和单机,在线就是类似于C/S模式,能与服务器与他人共享数据的程序,单机就是在没有网络下可以玩转的app. 目前互联网盛行的时代,99%的程序都是联网环境下工作的.那么如何开发本地 ...
- mui开发app之webview是什么
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,webview被封装在html5+,plus对象中,底层由java,OC实现. 先来谈谈我对webview的理解: 使用mui开发的a ...
- MUI开发APP,scroll组件,运用到区域滚动
最近在开发APP的过程中,遇到一个问题,就是内容有一个固定的头部和底部. 头部就是我们常用的header了,底部的话,就放置一个button,用来提交页面数据或者进入下一个页面等,效果 ...
- 11个有用的移动网页开发App和HTML5框架
在过去的两年里,触屏设备飞速增长.iOS和Android设备让开发者和设计师开始重新思考他们的网页应用,以提供更好的触屏体验. 移动Web应用相对于本地的App有很多优势,虽然也有很多设计和开发上的挑 ...
- mui开发app之多图压缩与上传(仿qq空间说说发表)
欲实现效果图 提出需求点: 用户可自由添加删除替换多张图片,并且显示相应缩略图,限制为8张 用户可选择压缩图或直接上传原图功能 返回提醒用户会丢失填写的信息 下面一个个实现上述需求,从简单到复杂: 需 ...
随机推荐
- Mac下tomcat配置ssl
最近在搞单点登录CAS,第一步就是需要给tomcat配置证书.但是,第一次配置就遇到了个问题排插了一下午.下面来存一份文档,以备以后遇到. 一.首先准备好环境 java环境:配置好环境变量,找到jdk ...
- 关于Tarjan(2)
Tarjan有第二个神奇的用法,求强连通分量!!!!!!!!!!!!!!!!!!! 同样利用了dfn:dfs序,low:能回到的最早祖先的dfn: 废话少说 上板子 #include<iostr ...
- 使用 POJO 对象绑定请求参数
概述 Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值并且支持级联属性.这一特性在日常开发过程中使用频率比较高,开发效率也高,本文主要对 POJO 对象绑定 ...
- Java:从面试题“i++和++i哪个效率高?"开始学习java字节码
今天看到一道面试题,i++和++i的效率谁高谁低. 面试题的答案是++i要高一点. 我在网上搜了一圈儿,发现很多回答也都是同一个结论. 如果早个几年,我也会认同这个看法,但现在我负责任的说,这个结论是 ...
- Linux块设备IO子系统(二) _页高速缓存
磁盘驱动就是实现磁盘空间和内存空间数据上的交互,在上一篇中我们讨论了内存端的Page Segment Block Sector相关的概念,本文以3.14内核为例,讨论这部分内存是如何被组织管理的.我们 ...
- vmware克隆之后网卡起不来的问题
问题: 克隆一台主机之后,改主机的网卡起不来,只有一个本地的回环地址网卡. 使用如下的命令都无效. /etc/init.d/network restart ifup eth0 原因: 这一vmware ...
- 深入React组件生命周期
上篇博文使用React开发的一些注意要点对React开发的一些重点进行了简单的罗列总结,虽然也提到了React生命周期,但只略微小结,在此单独写篇React生命周期的总结. 在组件的整个生命周期中,随 ...
- flex盒子里面元素linehight对高度的影响
那天,高高兴兴的测试flex属性.大家都知道,当父盒子display:flex的时候,子盒子即使宽高和大于父盒子,也会由于flex的特性进行收缩:然而,在给父盒子加了flex-direction:co ...
- iPhone与iWatch连接、控制、数据传递(Swift)
最近在做一个项目,涉及到iPhone设备和手表传输数据.控制彼此界面跳转,在网上找了很多资料,发现国内的网站这方面介绍的不多,而国外的网站写的也不是很全,所以在这写这篇博客,给大家参考一下,望大神指点 ...
- Struts2之i18N国际化
对于i18n其实没有太多内容,一般的公司用不到这些内容,除非是跨国公司,但即便是跨国公司也不一定会使用i18n来进行国际化处理,所以本篇内容仅供大家了解,不做深入的探讨,希望通过本篇内容,可以帮助大家 ...