当前位置: 首页 > news >正文

XUL 用户界面语言介绍

XUL[1]是英文“XML User Interface Language”的首字母缩写。它是为了支持Mozilla系列的应用程序(如Mozilla Firefox和Mozilla Thunderbird)而开发的用户界面标示语言。顾名思义,它是一种应用XML来描述用户界面的标示语言。
XUL是开放标准,重用了许多现有的标准和技术[2],包括CSS、JavaScript、DTD和RDF等。所以对于有网络编程和设计经验的人士来说,学习XUL比学习其他用户界面标示语言相对简单。
使用XUL的主要好处在于它提供了一套简易和跨平台的widget定义。这节省了编程人员在开发软件时所付出的努力。

XUL元素 XUL定义了一套丰富的元素。它们大致上可分为以下几种:
基层元素:例如视窗、page、对话框、向导
Widget:例如标签、按钮、文字方块、条列式菜单、组合方块、选择钮、复选框、树、菜单、工具栏、分组框、标签页、色彩选择器、spacer、splitter
排版:例如方框、网格、堆栈、叠
事件和脚本:例如脚本、命令、key、broadcaster、observer
数据源:例如template、rule
其他:例如overlay(类似SSI,但在客户端运作,而且更为强大)、iframe、浏览器、编辑器
一个XUL文件中也可以包含其他XML命名空间的元素,例如XHTML、SVG和MathML。
现时的XUL还未在提供一些普遍的widget,例如spinbox、slider和canvas。XUL 2.0[3]计划中将会包括这些缺乏的控件。

XUL是如何处理的[4]
Mozilla浏览器内部使用跟HTML的处理非常相似的方法来处理XUL:当你在浏览器的地址栏里面输入HTML页面的URL以后,浏览器就定位这个网址并下载页面内容,然后Mozilla将页面内容转换成树的数据结构,最后再将树转换成对象集合,集合中的对象最终被展现在屏幕上就成了我们所见的网页。CSS, 图片以及其他技术被用来控制页面的展现。XUL的处理过程与此非常类似。

XUL应用 虽然XUL的设计原意是为了创作Mozilla程序及其扩展,但事实上人们也能利用它来编写基于HTTP的网络应用程序和基于swt/swing/gwt的客户端程序。一些开源的架构使用了XUL,例如Pentaho XUL Framework[5]。Pentaho XUL使用XUl跨多种技术(Swing, SWT, GWT)渲染用户界面,来实现业务逻辑的可重用性。shandor-xul[6]项目也是基于XUl开发的,项目地址见参考资料[6]。
Firefox里内置的一些XUL 地址见:http://www.cnblogs.com/jxsoft/archive/2011/04/07/2008202.html

运行XUL应用程序 可以选择 3 种方式来运行 XUL 应用程序:
1.使用基于 Mozilla 的浏览器进行简单测试
2.使用XULRunner
3.使用Firefox 3.0作为XUL运行时,它的功能和 XULRunner很相似

总结 XUL用户界面语言是一种可用于开发Mozilla独立应用程序和浏览器扩展的通用语言,还可以用来实现跨多种UI技术的用户接口,提高业务逻辑代码的重用性,第二点视乎是更值得推荐使用的。关于XUl的教程见参考资料。

参考资料

1.XUL Wiki : http://zh.wikipedia.org/wiki/XUL 2.XML 用户界面语言(XUL)开发简介: http://www.ibm.com/developerworks/cn/education/xml/x-xulintro/section2.html 3.XUL 2.0:   https://wiki.mozilla.org/XUL:Home_Page 4.[XUL结构](https://developer.mozilla.org/cn/XUL_%E6%95%99%E7%A8%8B/1-2_XUL%E7%9A%84%E7%BB%93%E6%9E%84) 5.Pentaho XUL ramework:   http://wiki.pentaho.com/display/ServerDoc2x/The+Pentaho+XUL+Framework+Developer's+Guide 6.shandor-xul: http://code.google.com/p/shandor-xul/ 7.Mozilla XUL教程:   https://developer.mozilla.org/index.php

相关文章:

  • Reddit引入Envoy支持架构改造,性能显著提升
  • 弄懂Favicon
  • 基于django的视频点播网站开发-step15-项目部署
  • php任务队列
  • OpsRamp推出以服务为中心的AIOps和云监控功能
  • C# 如何在Excel 动态生成PivotTable
  • 08.Android之View事件问题
  • .naturalWidth 和naturalHeight属性,
  • 数据模型
  • 深度解析利用ES6进行Promise封装总结
  • 上传本地项目到git.oschina
  • ES6系统学习----从Apollo Client看解构赋值
  • 前端临床手札——文件上传
  • IDEA Git版本回滚提交方式
  • spring framework 模块简介
  • [nginx文档翻译系列] 控制nginx
  • CentOS7简单部署NFS
  • Java教程_软件开发基础
  • JS题目及答案整理
  • leetcode388. Longest Absolute File Path
  • mockjs让前端开发独立于后端
  • MySQL几个简单SQL的优化
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PHP CLI应用的调试原理
  • python 装饰器(一)
  • React+TypeScript入门
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Twitter赢在开放,三年创造奇迹
  • underscore源码剖析之整体架构
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何解决微信端直接跳WAP端
  • 异步
  • 原生js练习题---第五课
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #### go map 底层结构 ####
  • $ git push -u origin master 推送到远程库出错
  • (六)c52学习之旅-独立按键
  • (四) 虚拟摄像头vivi体验
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • .Net Core webapi RestFul 统一接口数据返回格式
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Documented注解的作用
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [20171101]rman to destination.txt
  • [Android] Upload package to device fails #2720
  • [Java并发编程实战] 共享对象之可见性
  • [jQuery]div滚动条回到最底部
  • [LeetCode]—Permutations II 求全排列(有重复值)
  • [NAND Flash 6.1] 怎么看时序图 | 从时序理解嵌入式 NAND Read 源码实现
  • [NOIP2018 PJ T4]对称二叉树
  • [python]基于opencv实现的车道线检测
  • [RK-Linux] 移植Linux-5.10到RK3399(四)| 检查HDMI配置与打开内核LOGO显示