XUL 和 HTML¶
本文档简要概述了 XUL 和 HTML,尤其是在与桌面前端开发人员相关的情况下。当我们尽可能地从 XUL 元素迁移到 HTML 元素时,请注意这两种技术之间的区别非常重要。此外,了解如何在需要时同时使用两者也很有帮助,因为某些元素仍然需要使用 XUL。
什么是 XUL¶
XUL 是一种基于 XML 的语言,用于构建跨平台用户界面和应用程序,因此 XML 的所有功能在 XUL 中也可用。这与旨在开发网页的 HTML 形成对比。因此,XUL 面向应用程序工件,例如窗口、滚动条和菜单,而不是页面、标题、链接等。这些 XUL 元素提供给 HTML 页面,而页面对此没有任何控制。
XUL 曾用于(并且仍在使用)创建各种 UI 元素,例如
输入控件,例如文本框和复选框
带有按钮或其他内容的工具栏
菜单栏上的菜单或弹出菜单
选项卡式对话框
用于分层或表格信息的树
XUL 是一项 Mozilla 专有技术,与 HTML 具有许多相似之处,但也存在许多差异。其中包括不同的盒子模型(尽管它现在在 HTML 盒子模型中被综合)以及能够由 C++ 代码支持的能力。
哪些需要 XUL¶
虽然构成浏览器的许多现有 XUL 元素可以迁移到 HTML,但有些元素需要 XUL。这些元素往往是浏览器基础元素,例如窗口、弹出窗口、面板等。需要模拟操作系统特定样式的元素也往往是 XUL 元素。虽然这些元素的某些部分必须是 XUL,但这并不意味着该组件必须完全在 XUL 中实现。例如,我们要求一个 panel
可以绘制在窗口边界的外部,但随后我们可以在该 panel
元素中包含 HTML。
以下是需要 XUL 的元素的不完整列表
浏览器窗口
https://searchfox.org/mozilla-central/source/xpfe/appshell/nsIXULBrowserWindow.idl
弹出窗口
https://searchfox.org/mozilla-central/source/dom/webidl/XULPopupElement.webidl
https://searchfox.org/mozilla-central/source/layout/xul/nsMenuPopupFrame.cpp
https://searchfox.org/mozilla-central/source/toolkit/content/widgets/autocomplete-popup.js
https://searchfox.org/mozilla-central/source/toolkit/content/widgets/menupopup.js
面板
https://searchfox.org/mozilla-central/source/toolkit/content/widgets/panel.js
何时使用 HTML 或 XUL¶
现在 HTML 足够强大,我们可以用它创建几乎整个应用程序,因此对 XUL 功能的需求减少了。我们现在更喜欢编写 HTML 组件而不是 XUL 组件,因为该模型更易于 Web 和前端社区理解。这还使我们能够在编写的 UI 中获得 Web 的新功能,而无需将其移植到 XUL。
在某些情况下,对于非标准功能可能仍然需要 XUL。某些 XUL 元素比类似的 HTML 元素具有更多功能,例如与 HTML <iframe>
元素相比的 XUL <browser>
元素。XUL <panel>
可以超出其父文档的范围,对于下拉菜单、菜单和类似情况很有用。在这些情况下,使用 XUL 元素是合适的。否则,我们希望 开始用 HTML 元素替换 XUL 元素。因此,新代码**应尽可能使用 HTML**。
混合使用 HTML 和 XUL¶
为了在 XUL 文件中使用 HTML,您必须执行一些操作。首先,您必须将以下属性添加到 XUL 文件的 window
标记或最外层的 HTML 元素中。 xmlns:html="http://www.w3.org/1999/xhtml
。使用此属性可以让 Firefox(或其他使用 Gecko 的应用程序)区分 HTML 标记和 XUL 标记。其次,使用的任何 HTML 元素都必须以 html:
为前缀,否则该元素将被解析为 XUL 元素。例如,要使用 HTML 锚点,您将将其声明为 <html:a>
。第三,您使用的任何标记或属性都必须是小写,因为 XML 区分大小写。
请注意 您不能在 HTML 标记中声明 XUL。您可以使用 document.createXULElement()
以编程方式在 chrome 权限文档中创建 XUL 元素。