闲扯两句用前端技术构建桌面程序
2012-05-06 12:59:37
其实缘由是这样的,做毕设要做界面,用什么写界面好呢?java?no! 本想学学 C# 的,久仰 C# 的委托、lambda 表达式和 Linq,Mono + GTK# 估计不错。当然用 lua + iup 也可以,iup 沿袭了 lua 一贯的简洁风格。 不过我认为 HTML + CSS + JavaScript 才是 GUI 程序的最优雅的构建方式。为什么呢?内容、表现与逻辑的分离,谁用谁知道。实际上前端技术相当于是一套创建 GUI 的 DSL 。 用 HTML + CSS + JS 构建桌面应用适用于一些简单的 GUI 程序,比如一个 CLI 程序的 GUI 前端,但可能并不适合那些超大型的 GUI 程序,比如 IDE 就最好用静态语言写(Java / C#)。 说起用前端技术构建桌面应用,我知道的最早的恐怕是微软的 .hta 了,我高中的时候就用过这玩意。在 Windows 上,将一个 html 文件的后缀名改成 hta,你试试,双击运行,发生了什么? 所以说有些时候微软的技术还是很超前的,你们不要一个劲儿地鄙视微软。hta 模式给予一个普通的 html 很高的权限,你可以创建任意 ActiveX 控件,不需要用户确认。用微软 JScript 创建文件只需这么干: <script> var fso = new ActiveXObject("Scripting.FileSystemObject"); var a = fso.CreateTextFile("c:\\testfile.txt", true); a.WriteLine("This is a test."); a.Close(); </script> 我以前不知道 Linux 的时候,以为微软就是天下,用着这套技术觉得很爽,现在我觉得不能用这个,为什么呢?不为什么,我现在 prefer 开源的东西。 仔细分析我们的需求,桌面应用相对于 HTML 多出来的部分也就是:本地文件操作、进程创建等功能。实际上我所需要的就是,在 js 引擎里扩展这些功能,让 js 可以访问文件系统,可以创建进程(咦,这不就是 node.js 干的事情么?),然后界面部分跟标准 HTML + CSS 一样就行。所以,我们需要的就是在 js 里访问文件系统,就像 hta 干的那样。 然后出现的技术包括微软的 XAML 和 Mozilla 的 XUL(我已经不知道它们是谁抄谁了)。不过它们好像都是自己搞了一套标记语言,而不是重用 HTML 。还有自己的一套 FileSystem API,如果不是后来出现了 node.js 的话,其实也可以凑合着用…… 豆瓣的同学制作了 OneRing:http://code.google.com/p/onering-desktop/ 真是于我心有戚戚焉。把 hta 技术里的 IE 换成了 Webkit,据说豆瓣电台桌面版就是用这个写的。 然后就出现了 node.js ,明眼的人都能看得出来,这就是救星。node.js 实现了基于 JavaScript 的 OS/FileSystem API 的大统一。It's exactly what we need! 于是,把 node.js 整合到 Webkit 里就是一个自然而然的想法,把 Webkit 的 js 引擎换成 V8 + node.js。这样一来,所有的部分都是广泛使用,而且跨平台的了。 我们来看几个: https://github.com/arturadib/node-qt 创建 GUI 谁他妈要用 QT?劳资就要用 HTML + CSS 创建界面! 再重申我想要的是什么:直接弹出一个 Webkit 窗口(可以是去掉菜单栏、标签栏、状态栏的,就像 hta 做的那样,也像 OneRing 做的那样),看起来就像是一个桌面应用,但内部是 HTML + CSS 。 https://github.com/rogerwang/node-webkit 可能还可以 https://github.com/creationix/topcube 可能也可以...? https://github.com/appcelerator-titans/nodejs-desktop-prototype ?? 姑且先试试上面的两个,如果他们没达到我的要求我会考虑贡献代码。 |
|