XUL Overlays 覆盖
对于 Firefox 扩展来说,install.rdf 和 chrome.manifest 都很格式化,每个扩展都可以从一个相同的模板少许改动即可。真正重要的是 .xul 界面定义。
XUL 是 Mozilla 基于 XML 的一种界面定义语言,完整的参考文档在这里。对于覆盖技术也不仅是 Firefox 的专利,而是 Mozilla 所有产品通用的。
一个 Firefox 扩展的覆盖 XUL 框架大致是这样:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://foo/skin/overlay.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://foo/locale/foo.dtd">
<overlay id="foo-overlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://foo/content/overlay.js"></script>
<stringbundleset id="stringbundleset">
<stringbundle id="foo-strings" src="chrome://foo/locale/foo.properties"/>
</stringbundleset>
...
</overlay>
这里面有 XML 的标准头定义,然后是 XUL 控件使用的 CSS 样式表定义,使用文字的本地化定义。主要的内容是覆盖的定义以及下面的 JS 功能脚本以及额外的本地化字符串属性文件。除开覆盖本身的定义,其他的都是可选的。省略号表示的是具体的覆盖内容。比如:
- 覆盖工具菜单。
- 覆盖右键弹出菜单(在增加的子菜单中)。
- 工具栏。
- 状态栏。
<menupopup id="menu_ToolsPopup">
<menuitem insertafter="devToolsSeparator" label="Options..." oncommand="foo.showOptions();" />
</menupopup>
<popup id="contentAreaContextMenu">
<menu label="foo">
<menupopup>
<menuitem insertafter="devToolsSeparator" label="Options..." oncommand="foo.showOptions();" />
</menupopup>
</menu>
</popup>
<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="foo-toolbar-button"
label="Options..."
tooltiptext="Foo Options"
oncommand="foo.showOptions()"
class="toolbarbutton-1 chromeclass-toolbar-additional"/>
</toolbarpalette>
<statusbar id="status-bar">
<statusbarpanel id="foo-panel" label="Options"/>
</statusbar>
发表评论