0

我正在为客户开发一个工具栏,该客户希望在地址栏下方的窗口顶部有一个传统的 IE 样式工具栏。

这就是我所拥有的: 我所拥有的 http://www.hellometro.com/toolbar/now.png

请注意,由于状态栏的垂直限制,我必须全大写字母才能使字母清晰易读,同时又足够小以适合。(状态栏、文本字段和搜索按钮中最左边的两个元素)

这就是我需要的: 我需要的 http://www.hellometro.com/toolbar/whatiwant.png

注意添加到顶部的工具栏有足够的垂直空间用于文本字段和按钮中的清晰文本。(左上角在浏览器的后退按钮下方)。

我正在寻找一种将状态栏上的搜索组件定位为默认位置的方法,并允许用户更改其在选项页面中的位置以让他们选择顶部或底部(因为即使不是大多数 Firefox 用户也不会这样做)不知道他们可以移动附加组件)。

我的问题是:Firefox Add-on SDK 是否支持我想做的事情,还是我必须切换语言并从不同的角度处理解决方案?

4

2 回答 2

5

这不是您可以使用可用的附加组件 SDK API 完成的事情,这是有充分理由的 - 附加组件不应不必要地浪费屏幕空间,而添加工具栏就是这样。您可以通过使用低级模块并直接访问浏览器的 XUL 来实现此目标。像这样的东西应该可以工作(未经测试的代码和非常hacky):

var widgetID = "foobar";
var buttonID = "widget:" + require("self").id + "-" + widgetID;
var toolbarName = "My Extension Toolbar";
require("widget").Widget({
  id: widgetID,
  ...
});

if (firstRun)
{
  var winUtils = require("window-utils");
  for (var window in winUtils.browserWindowIterator())
  {
    var toolbox = window.gNavToolbox;
    if (toolbox)
    {
      // Does the button exist already?
      var button = toolbox.ownerDocument.getElementById(buttonID);
      if (button && button.parentNode.getAttribute("toolbarname") == toolbarName)
        continue;  // Button already in the right toolbar
      else if (button)
      {
        // Remove button from its current location
        var toolbar = button.parentNode;
        toolbar.removeChild(button);

        // Make sure this change is persisted
        toolbar.setAttribute("currentset", toolbar.currentSet);
        toolbar.ownerDocument.persist(toolbar.id, "currentset");
      }

      var toolbar = toolbox.appendCustomToolbar("My Extension Toolbar", buttonID);
      toolbar.currentSet = toolbar.getAttribute("currentset");
      toolbar.ownerDocument.persist(toolbar.id, "currentset");

      // Send change notification, the widget needs reinitializing
      var event = toolbox.ownerDocument.createEvent("Events");
      event.initEvent("customizationchange", true, true);
      toolbox.dispatchEvent(event);
    }
  }
}

请注意未定义的firstRun变量 - 您只想执行一次,否则您将恢复用户选择将您的小部件移动到其他位置(您可以通过simple-prefs模块或类似的方式存储标志)。另请注意,buttonID计算使用addon-kit/lib/widget.jsSDK 中文件的内部详细信息 - 工具栏按钮 ID 的计算方式可能会在未来的 SDK 版本中更改,但我认为这是获取使用 SDK 创建的小部件的唯一方法。当然,代码的其他部分也有很多内部结构。

文档:window-utils模块browserWindowIterator未记录)<xul:toolbox>,,,<xul:toolbar>

于 2012-04-18T12:41:20.563 回答
2

从 Firefox 29 开始(在撰写本文时为 Beta 版),您可以非常轻松地向 Firefox 添加工具栏按钮,请参阅此博客文章,了解如何使用附加 SDK 进行操作:

https://blog.mozilla.org/addons/2014/03/13/new-add-on-sdk-australis-ui-features-in-firefox-29/

您也可以通过较低级别的 api 执行此操作,有关更多信息,请参阅此 hacks 帖子:

https://blog.mozilla.org/addons/2014/03/06/australis-for-add-on-developers-2/

于 2014-04-13T03:48:01.977 回答