附加组件栏

Firefox 4 取消了浏览器窗口底部的状态栏,取而代之的是一个位于窗口底部的新的工具栏。此新工具栏的 ID 为“addon-bar”,是一个标准的 XUL <toolbar>;附加组件可以向其中插入内容,用户在自定义工具栏时可以将按钮拖动到其中。这是附加组件栏与旧状态栏之间的主要区别;现在您可以向其中放入任何 XUL 元素,因为它是一个标准的工具栏。

注意:目前,包含了一个状态栏模拟层,以便期望状态栏存在的附加组件仍能正常工作。

向附加组件栏添加元素

附加组件栏是一个 ID 为“addon-bar”的 XUL 工具栏。以下代码找到最近使用的窗口,并在附加组件栏中添加一个新项目,该项目使用 XUL <label> 元素显示文本“Hello world!”。

js
// Find the most recently used window

var mediator = Components.classes[
  "@mozilla.org/appshell/window-mediator;1"
].getService(Components.interfaces.nsIWindowMediator);
var doc = mediator.getMostRecentWindow("navigator:browser").document;

// Get the add-on bar for that window

var addonBar = doc.getElementById("addon-bar");

// Construct the new toolbar item

var newItem = doc.createElement("toolbaritem");
var itemLabel = doc.createElement("label");

// Add the item to the toolbar and set its text label

newItem.appendChild(itemLabel);
addonBar.appendChild(newItem);
itemLabel.value = "Hello world!";

要仅添加一次按钮,请创建一个布尔首选项以检查是否为首次运行。 例如

js
var firstrun = Services.prefs.getBoolPref("extensions.YOUREXT.firstrun");

var curVersion = "0.0.0";

if (firstrun) {
  Services.prefs.setBoolPref("extensions.YOUREXT.firstrun", false);
  Services.prefs.setCharPref("extensions.YOUREXT.installedVersion", curVersion);
  /* Code related to firstrun */
} else {
  try {
    var installedVersion = Services.prefs.getCharPref(
      "extensions.YOUREXT.installedVersion",
    );
    if (curVersion > installedVersion) {
      Services.prefs.setCharPref(
        "extensions.YOUREXT.installedVersion",
        curVersion,
      );
      /* Code related to upgrade */
    }
  } catch (ex) {
    /* Code related to a reinstall */
  }
}

如何为每个 Firefox 版本使用一个叠加层

在保持与 Firefox 3.6 及更早版本兼容的同时添加对附加组件栏的支持需要使用两个叠加层。该 chrome.manifest 文件可以通过使用 清单标志 指定哪个文件由哪个 Firefox 版本使用。

overlay chrome://browser/content/browser.xul chrome://myaddon/content/myaddon/overlayold.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} appversion<4.0
overlay chrome://browser/content/browser.xul chrome://myaddon/content/myaddon/overlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} appversion>=4.0

注意:appversion 必须至少为两位数,否则它将无法与 1.8.0.13 和 1.8.1.5 之前的 Gecko 版本一起使用。

默认添加按钮

请参阅:默认添加按钮

外观差异

  • 由于浏览器不再使用状态信息占用工具栏的大部分区域,因此整个区域都可供附加组件使用。
  • 附加组件栏默认情况下为空且隐藏;用户必须选择使其可见。
  • 如果无重启附加组件直接安装到附加组件栏,并且该栏尚未可见,则该栏会自动可见。
  • 如果卸载无重启附加组件导致附加组件栏中的项目数量变为零,则该栏会自动隐藏。

另请参阅