本文原文链接:http://zhchbin.github.com/Web/2012/10/05/chrome-packaged-apps/ (我Github的博客)
引言:近期关注着HTML5的一些发展与应用,无意之间看到了Chrome Packaged Apps,顿时给这个Technology吸引住了。下面就简单的介绍下这个新的概念。(其实概念说新也不新,只是没什么人留意啊)
什么是Packaged Apps?
Packaged apps deliver an experience as capable as a native app, but as safe as a web page.
这句话来自Google的官方文档中,也就是说使用Packaged App能够带给用户带来本地化应用程序一样的体验效果,说的更明白点,以往我们要写一个Window上的Desktop应用,为了实现简单,无非都是要使用一套UI框架,比如使用Qt,Winform,WPF之类的技术,而现在Packaged App也一样实现出相同的功能了。而令人惊奇的是,Packaged Apps采用的是HTML5(Javascript + CSS3 + HTML5),其运行环境是Chrome浏览器。我们都知道为了安全,Web应用相对本地应用,其访问本地资源的能力是非常有限的,就拿文件系统来说吧,在web应用中,以webkit为内核的浏览器中,使用<
input type=’file’/>
获取得到的路径都是fakepath的。(在Demo中可以看到相关的例子,能够获取绝对路径,并使用W3C标准进行文件的读写)。但是在Packaged App中,很多限制是在保证安全性的前提下最大化的开放了。
其实胡扯了上面这段话,究竟Packaged App能够给我们带来什么耳目一新的东西呢?
-
Cross Platform: 最大的好处就是可以真正实现桌面应用程序的跨平台,对比其他号称跨平台的技术,比如Qt,要实现跨平台,在不同的平台下还是得重复编译,同时涉及系统API的使用还是不能跨平台的。而Packaged App不同,采用的相同的一套封装好的javascript的API,只要有安装Chrome浏览器,就能在不同的平台下获得一模一样的用户体验。
-
Easy: 容易,从开发,到部署,到应用更新,整个的生态系统Google都打造的差不多了,就等推广使用了。先说说开发容易,只要掌握基本的Web开发技术,就能轻松上手。部署,应用开发人员只需将应用上传到Chrome的Web Store中就能完成发布,用户只要轻轻一点就能够使用了(还在想安装本地化应用的时候各种麻烦事情吗?)。应用更新,开发者将你的应用在Web Store上更新下就行了,用户端会自己更新到最新的版本(目前采用的是Omaha V2的更新协议),而且这种更新相对于本地化应用的更新,几乎是透明的,用户甚至可以在使用的过程中就不知不觉完成了应用的更新。
-
Native Behave: 相对于Web应用,chrome.* API赋予其本地化应用的能力,应用运行时的事件:chrome.app.runtime,比如应用Launch;程序窗口的相关操作:chrome.app.window,比如:获取焦点,移动,最大化,最小化,Resize等;右键菜单:chrome.contextMenus;文件系统的访问:chrome.fileSystem,比如选择一个文件并获取其绝对路径,保存文件; 以及其他API,现在很多API还在开发阶段,相信再过不久就能够相当完善了。
还有很多其他的好处(PS: 应该也是有不少其他问题的),在这里就不一一列举了。接下来进入Demo环节,简单地说明下如何进行一个应用的开发。
Demos
-
First:创建一个文件夹,并创建一个”manifest.json”的文件。这个文件主要是需要描述应用的一些相关信息,比如应用名,需要使用的权限等,与Extension采用的一样的格式,这里有详细的说明:link
-
Second: 使用HTML5的相关技术实现相应的功能,有各种各样的API能够供你使用。在这里,你完全可以使用web开发的使用的做法,只不过要记住现在是在写一个本地应用就行了,要留意有些操作为了安全是无法直接实现。
-
Third: 使用最新版本的Chrome Canary(我用的是Version 24.0.1286.0 canary),在工具——>扩展的页面中,打开开发者模式, 选择Load unpacked extension…
-
Fourth:慢慢体验其惊奇之处吧。
下面是来自GoogleChrome Github上的Diff的界面截图
Some Links
- Chrome 官方文档:Chrome Packaged Apps,在这里你可以找到详细的开发文档。
- Demos App: Chrome app samples,在这里你可以找到相当丰富的API使用Demo