HTML5已经足够强大,但不少应用仍是须要独立桌面客户端的解决方案,毕竟能操做本地文件等功能仍是不少工具类软件短时间内没法彻底采用云方案替代。javascript
最近Adobe发布的http://brackets.io也是相似的应用,Brackets这样描述本身:An open source code editor for the web, written in JavaScript, HTML and CSS. 这样的描述在过去很难想象竟然是编辑器的工具,现在采用WebKit嵌套各类壳的方案已让这类应用成为主流。php
Adobe的Brackets采用的是自家的https://github.com/adobe/brackets-shell/套壳框架,不过brackets-shell仅为Brackets量身定作,并不建议通常应用使用:java
Note: The brackets-shell is only maintained for use by the Brackets project. Although some people have definitely had success using it as an app shell for other projects, we don’t provide any official support for that and we haven’t done a ton of work to make the app shell easily reusable. Many people will likely find it easier to use a project like node-webkit, which is more generic by design.node
通常应用采用https://github.com/rogerwang/node-webkit,HT for Web天然也能经过node-webkit打包成客户端应用程序,以下图所示:git
最近遇到用户经过Qt将HT for Web嵌入QtWebKit的解决方案,但遇到了显示正常但没法鼠标操做的奇怪问题,通过一番折腾才发现HT竟然把QtWebKit在桌面的环境,错误的识别为可Touch的移动终端环境,如何正确判断Touch和Mouse的交互环境是很是狗血的事情,可参考http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript/4819886#4819886 加上现在window8的便可touch又可mouse让问题更加复杂化。github
还好HT预留了可配置的方案,经过在引入ht.js包以前设置htconfig = {Default: {isTouchable:false}};强制HT采用常规的mouse事件进行处理。由于HT内部简单采用”ontouchend” in document的方案来判断,通常状况下桌面环境该值为undefined,移动终端为null,而QtWebKit竟然在桌面环境下也为null,结果HT采用了Touch的监听事件从而致使了没法操做的现象,经过htconfig的设置后一切就正常了!web
HTML5经过WebKit嵌入打包成本地应用已经不是新鲜事了,整个世界的各类客户端技术正在变得更加融合,无数种千奇百怪的客户端方案正在改变不少观点和架构,不久前的wwdc2014中的JavaScript for Automation我以为是被严重忽略的亮点,整个mac osx系统和应用程序均可经过JavaScrpit进行调用,早期window得利于众多应用软件而普及,苹果在站稳了移动终端后,借助诸如JavaScript for Automation的动做吸引更多专业客户端开发者,也许会不知不觉在桌面领域翻盘。shell