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>

发表评论

%d 博主赞过: