1999年的公开实现
1999年,Mozilla的跨平台前端开发已经把XUL用于浏览器及邮件程序的界面。XUL是“基于XML的用户界面语言”的简称,目标是用可读取的文档描述窗口、菜单、工具栏和对话框。开发者修改这些文档,就能改变界面的组织方式,减少为不同操作系统分别编写界面代码的工作。
这项设计由网景及Mozilla开发团队共同推进。丹尼尔·马泰卡撰写早期语言说明,Tao Cheng讨论其国际化与本地化,后来大卫·海厄特主持XUL 1.0文档编写。1999年适合作为公开开发阶段观察:语言说明仍持续修改,实现也随Mozilla的测试版本逐步扩充。
让界面成为可装载的文档
传统跨平台程序往往需要为各平台编写不同的C++界面代码。Mozilla将界面交给与网页内容相同的Gecko排版引擎处理:XUL按XML语法描述控件,CSS处理外观和布局,JavaScript连接用户操作与应用功能。程序中速度要求较高或接近系统的部分仍可由编译后的组件承担。
这种分工使按钮的形状、位置与点击后执行的任务可以分别安排。XUL文件也能混入属于HTML命名空间的元素。不过,共享文档并不能消除平台习惯的差异。早期说明专门指出,对话框按钮位置等仍可能需要平台专用版本,跨平台主要是减少重复实现,而非保证每个平台上的界面完全相同。
测试版中的邮件窗口
1999年3月的Mozilla M3版本给出了可操作的实现证据。发布说明在Windows邮件功能中列出mailshell.xul,使用者可以通过它或程序菜单打开三栏邮件窗口,查看文件夹、收件箱和邮件内容。XUL因此已进入实际应用界面,而不只是设计说明中的示意语言。
M3仍是功能有限的测试版本:有些菜单项和工具栏按钮尚未连接命令,书签可以显示却不能完整编辑。界面被绘制出来,与按钮背后功能全部完成,是两个不同层次。发布记录把这些限制逐项列出,也显示前端文档、事件处理及底层服务需要一起调试。
参考:[2]
一个“打开地址”对话框
Tao Cheng在1999年会议论文中使用openLocation.xul作为具体例子。文档先声明窗口及命名空间,再安排说明文字、地址输入框、是否在新窗口打开的复选框,以及打开、取消等按钮。该早期示例混用XUL窗口与HTML表格、输入框和按钮,并引用独立的openLocation.js脚本。
窗口载入后,脚本通过元素编号找到输入框和按钮,把光标放入地址栏。用户输入时,脚本根据内容是否为空改变打开按钮的可用状态;执行打开操作时,再读取地址,并按复选框状态交给原浏览器窗口或新窗口。这说明XML负责列出界面对象,脚本负责读取状态和安排动作,两者都不是单独完成应用的全部程序。
参考:[3]
把翻译资源从界面中取出
同一套界面还需要适应不同语言。论文比较多种方案后,选择把需要翻译的文字作为XML实体,放在独立的文档类型定义文件中。界面保留实体引用,运行时选择相应语言资源;编码则采用UTF-8,以便处理不同文字。
本地化并不止于替换几个菜单名称。德语标签可能比英语长,原来横排的控件因此需要改为竖排;图片、字体和其他显示属性也可能随地区调整。把文字、样式和程序行为分开管理,让翻译者和界面开发者能够分别修改自己的材料,同时仍需共同检验最终布局。
后续扩展与权限边界
2000年,迈克·谢弗和迈克尔·昂的架构说明进一步展示了XUL与组件系统的联系:JavaScript可借助XPConnect调用XPCOM组件,使界面动作访问应用程序的能力。报告还讨论了XBL,以扩展已有控件或组合出新的控件;这些属于1999年公开实现之后的架构发展。
同一报告区分了只改变图形和样式的皮肤,与包含脚本、能够改变浏览器行为的界面资源。后者必须来自受信任的代码。XUL利用网页开发者熟悉的语法扩大了界面编写空间,但它运行在Mozilla应用环境内,所能调用的组件及权限仍由该环境决定。2001年的XUL 1.0文档则继续整理布局、控件、模板等主题,反映了从早期实现向较完整语言说明推进的过程。