XUL : xml user interface language
DHTML : dynamic html
百科名片
(http://baike.baidu.com/view/8389.htm)
DHTML是Dynamic HTML的简称,就是动态的html,是相对传统的静态的html而言的一种制作网页的概念。所谓动态HTML(Dynamic HTML,简称DHTML),其实并不是一门新的语言,它只是HTML、CSS和客户端脚本的一种集成,即一个页面中包括html+css+javascript(或其它客户端脚本),其中css和客户端脚本是直接在页面上写而不是链接上相关文件。DHTML不是一种技术、标准或规范,只是一种将目前已有的网页技术、语言标准整合运用,制作出能在下载后仍然能实时变换页面元素效果的网页设计概念。
分类
DHTML建立在原有技术的基础上,可分为三个方面:
- 一是HTML(XHTML),也就是页面中的各种页面元素对象,它们是被动态操纵的内容;
- 二是CSS,CSS属性也是动态操纵的内容,从而获得动态的格式效果;
- 三是客户端脚本(例如JavaScript),它实际操纵Web页上的HTML和CSS。
- 补充:一个文档对象模型(Document Object Model, DOM)
使用DHTML技术,可使网页设计者创建出能够与用户交互并包含动态内容的页面。实际上,DHTML使网页设计者可以动态操纵网页上的所有元素——甚至是在这些页面被装载以后。利用DHTML,网页设计者可以动态地隐藏或显示内容、修改样式定义、激活元素以及为元素定位。DHTML还可使网页设计者在网页上显示外部信息,方法是将元素捆绑到外部数据源(如文件和数据库)上。所有这些功能均可用浏览器完成而无需请求Web服务器,同时也无需重新装载网页。这是因为一切功能都包含在HTML文件中,随着对网页的请求而一次性下载到浏览器端。
作用
可见,DHTML技术是一种非常实用的网页设计技术。实际上,DHTML早已广泛地应用到了各类大大小小的网站中,成为高水平网页必不可少的组成部分。 DHTML就是当网页从WEB服务器下载后无须再经过服务器的处理,而在浏览器中直接动态地更新网页的内容、排版样式、动画。比如,当鼠标移至文章段落中,段落能够变成蓝色,或者当你点击一个超链后会自动生成一个下拉式的子超链目录。这就是 Dynamic HTML(动态HTML),它是近年来网络发展进程中最具实用性的创新之一。它是一种通过各种技术的综合发展而得以实现的概念,这些技术包括Java Script , VBScript, Document Object Model (文档对象模型),Layers和Cascading Style Sheets ( CSS样式表)等。
DHTML 不是 W3C 标准
DHTML 指动态 HTML(Dynamic HTML)。 DHTML 不是由万维网联盟(W3C)规定的标准。DHTML 是一个营销术语 - 被网景公司(Netscape)和微软公司用来描述 4.x 代浏览器应当支持的新技术。 DHTML 是一种用来创建动态站点的技术组合物。 对大多数人来说,DHTML 意味着 HTML 4.0、样式表以及 JavaScript 的结合物。 W3C 曾讲过:“动态HTML是一个被某些厂商用来描述可使文档动态性更强的HTML、样式表以及脚本的结合物的术语。” DHTML 技术 通过 DHTML,Web 开发者可控制如何在浏览器窗口中显示和定位 HTML 元素。
- HTML 4.0 通过 HTML 4.0,所有的格式化(信息)可移出HTML文档,并写入一个独立的样式表中。因为 HTML 4.0 可以把文档的表现从其结构中分离,我们可以在不搞乱文档内容的情况下完全地控制表现层。
- 层叠样式表(CSS) 通过 CSS,我们得到了一种用于 HTML 文档的样式和布局模型。 由于 CSS 使开发者有能力同时控制多个网页的样式和布局,CSS 可以称作 Web 设计领域的一个突破。作为开发者,您可以为每个 HTML 元素定义样式,并把它应用到您希望的任意多的页面上。如果需要做一个全局的改变,只需简单地改变样式,Web 中所有的元素都会被自动地更新。补充:CSS让开发人员可以将页面的外观风格从HTML标签里分解出来,这样的属性有文本的字体和颜色,页面的背景色,或者留言器在渲染HTML表格里的格子上的留空等。CSS的定义和文档可以在www.w3.org/Style/CSS找到。样式表由一组规则组成。每条规则都由两个主要的部分:selector和声明(declaration)。selector定义了声明应用的上下文。在简单的情况下,selector就是类别的名字或者元素的名字,声明是一个属性/值对的列表,之间以冒号隔开。 值对之间以分号隔开。比如 span {font-size:12pt; color:red;}
- 文档对象模型(DOM) DOM 指文档对象模型。 HTML DOM 是针对 HTML 的文档对象模型。 HTML DOM 定义了针对 HTML 的一套标准的对象,以及访问和处理 HTML 对象的标准方法。 “W3C 文档对象模型(DOM)是一个中立于语言和平台的接口,它允许程序和脚本动态地访问和更新文档的内容、结构以及样式”。 补充:DOM是由 浏览器实现的层次型数据结构,包含了所有页面定义的元素和属性表达式,和一套运行你访问这个结构的API。当浏览器解析渲染一个页面时,会为其生成一棵树,这棵树就是DOM,树的每个节点代表了一个元素,同时它还保留了构成页面的元素之间的父子关系。要让脚本访问它,DOM里的每个元素都有惟一的标识符。实现这一点的一种办法就是为每一个元素的id属性指派一个惟一的值。
- JavaScript 使您有能力编写可控制所有 HTML 元素的代码。 JavaScript由Netscape发明,经过ECMA(European Computer Manufacturers Association)标准化后也被称为ECMAScript,JavaScript的文档可以在 http://developer.mozilla.org/en/docs/JavaScript 上找到。在 Netscape 4.x 以及 Internet Explorer 4.x 的 DHTML 技术 Netscape 4.x 跨浏览器 DHTML Internet Explorer 4.x JSS(JavaScript 样式表)(允许您控制不同的 HTML 元素如何显示) Layers(允许您控制元素的定位和可见性) CSS1 CSS2(允许您控制不同的 HTML 元素如何显示) CSS Positioning (允许您控制元素的定位和可见性) JavaScript 可视滤镜(允许您向文本和图形应用可视效果) 动态 CSS(允许您控制元素的定位和可见性)
XUL 构成
窗口和对话框,XUL主要用来描述窗口和对话框的内容。
- box 元素:用来在窗口和对话框里面对齐内容的主要widget。作用类似wxWidgets的sizer,以及QT里面的layout。主要的box有如下几类: <hbox>, <vbox>, <spacer>
- 工具条:用来将按钮组织在窗口的一个区域里,通常是窗口或者对话框的顶部。<toolbar> 把 一组 <toolbarbutton> 水平的组织在一起,在 <toolbar>里可以添加分隔符 把 <toolbarbutton>相互隔开.
- 菜单:主要的菜单有如下几类:<menubar>,<menu>,<menupopup>,<menuitem>
- 控件:XUL支持多种核心控件,主要有:<button>,<textbox>, <checkbox>,<radio>,<label>,<progressmeter>
- 其他widget:还支持树形widget,列表框,以及组合widget如嵌入式HTML编辑器,HTML浏览器,文件选择器,颜色选择器和打印器。
用XPCOM 和 XPConnect 接口化 JavaScript 和 C/C++
- XPCOM 全称是跨平台COM(Cross-Platform COM),它是基于微软的COM技术,运行应用程序在动态链接库(DLL,共享库)里定位和调用函数。XPCOM实现了组件式的软件开发。
- XPConnect技术允许从JavaScript和其他语言里调用XPCOM组件里的代码,组件里的类暴露的借口皆有XPCOM自己风格的IDL语言(interactive data language)定义,随后这个IDL处理生成用以实现这些类的头文件,XPConnect用来调用组件内功能的类型信息文件,以及调用者返回的结果。
Widget
- 在所有平台的GUI工具包里面,UI对象,或者说widget,都必须先创建,定位,然后才显示在包含它的UI里。Widget类的核心接口分别是——Create(), SetGeometry(), Show(), Hide()
- 除此之外,大多数GUI工具包都会定义两类widget。一种是控件widget,代表了可以和用户交互的项目。按钮,菜单和单选按钮等都是控件widget的例子。另一种是容器widget,用来管理或者定位窗口和对话框的控件widget。表格和box就是属于容器widget。
- 控件可以激活和失效,
- 大多数控件都有一个可以被应用程序读写,以及被用户修改的值。
- GUI的布局算法操作基本上遵循:
- 递归的决定每个非spacer widget 所需要的空间。如果显示的制定了集合属性,则使用这些值;否则,将会采用widget的默认大小。
- 计算窗口里的spacer的大小。同样,这一步也是递归进行的。
- 当所需的widget和spacer的大小都知道后,布局代码会计算每个box,widget,和spacer在窗口里的位置。
- 这中间有个特别的地方,当布局引擎计算窗口所需的尺寸过程中,遇到scrollwidget时,显示的使用scrollwidget的尺寸作为当前widget的尺寸,然后将scrollwidget作为root元素递归的将布局算法应用其上。