2010-07-06

以浏览器引擎为核心的软件架构

Views: 12783 | Add Comments

我在 2006 年的时候, 曾经提出过用 HTML/CSS 来做桌面应用程序的界面的想法, 但更早之前(2001年), 著名游戏开发者, 网易的游戏工程师云风便在其公司的"大话西游"网站游戏中应用了嵌入浏览器做界面的方法.

Windows 控制面板里的"添加/删除应用程序"应该是较早的利用浏览器来做程序界面的一个程序, 当然, 微软肯定还有更早的程序. 后来的 Google Talk, 又是一个经典的利用浏览器做界面的一个软件.

通过分析, 可以发现 Google Talk(gtalk)的程序使用了 mshtml.dll 动态链接库, 这个库就是 IE 引擎. 而且, gtalk 的界面的一部分就是纯 HTML, 用户可以自己修改并生效.

所以说, 使用浏览器引擎作为软件的界面引擎和桌面软件整个架构的核心, 这种技术已经非常成熟了. 以浏览器引擎为核心, 其实是一种更为纯粹的 MVC, 或者说 C/S 模式. 软件界面和逻辑层的通信主要有如下几种:

1. HTTP 网络通信

这种方式, 不仅嵌入浏览器引擎, 而且还嵌入 Web 服务器(如果不做成单纯的 Web 应用的话). 软件界面这时成为一个重新包装了外壳的浏览器. 例如, 用户点击了"计算"按钮, 程序将向嵌入的 Web 服务器提交一个表单, 并读取服务器的计算结果显示出来.

这种方式并不常用, 应该它直接使用浏览器的 Web 应用没有太大区别. 网络延时会成为问题.

2. 使用浏览器控件的 API

浏览器控件(以 MSHTML 为例)提供了 API, 既可让浏览器中的代码(界面)调用宿主程序的代码(后端逻辑), 也可以反之. 这种接口一般就是一个函数, 比如宿主程序可能这样调用界面脚本中的 js_func 函数:

mshtml.InvokeScript('js_func', args);

而浏览器中的代码可能这样调用宿主程序中的 Add 函数:

window.external.Add(1, 2);

仅仅使用这个 API 还是太原始, 如果要做更复杂的程序, 应该自定义一套界面和逻辑的交互协议.

Related posts:

  1. Google Talk 界面开发分析
  2. Google Talk Developer Home 中文翻译
  3. 使用Gaim连接Gtalk
  4. 安装和使用Google Earth – Linux
  5. endlessssh – SSH 代理工具
Posted by ideawu at 2010-07-06 10:34:22

Leave a Comment