我正在为客户开发一个工具栏,它希望在地址栏下方的窗口顶部有一个传统的IE样式工具栏。
这就是我所拥有的: What I have http://www.hellometro.com/toolbar/now.png
请注意,由于状态栏的垂直限制,我必须用全大写字母书写,以使字母清晰易读,同时小到足以容纳。 (状态栏中最左边的两个元素,文本字段和SEARCH按钮)
这就是我需要的: What I need http://www.hellometro.com/toolbar/whatiwant.png
请注意添加到顶部的工具栏,其中有足够的垂直空间用于文本字段和按钮内的清晰文本。 (在浏览器的后退按钮下方左上方。)
我正在寻找一种方法,将状态栏中的搜索组件定位为默认位置,并允许用户更改其在选项页面中的位置,让他们选择顶部或底部(因为很多,如果不是大多数Firefox)用户不知道他们可以移动附加组件。
我的问题是:Firefox附加SDK是否支持我想做的事情,还是我必须从不同的角度切换语言和解决方案?
答案 0 :(得分: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
计算使用SDK中addon-kit/lib/widget.js
文件的内部详细信息 - 计算工具栏按钮ID的方式可能会在将来的SDK版本中发生变化,但我认为这是唯一可以获得的方法保存您使用SDK创建的小部件。当然,代码的其他部分也有很多内部功能。
文档:window-utils
module(browserWindowIterator
未记录),<xul:toolbox>
,<xul:toolbar>
。
答案 1 :(得分:2)
从Firefox 29开始(截至Beta编写),您可以非常轻松地向Firefox添加工具栏按钮,请参阅此博客文章,了解如何使用附加SDK执行此操作:
https://blog.mozilla.org/addons/2014/03/13/new-add-on-sdk-australis-ui-features-in-firefox-29/
您也可以通过较低级别的apis执行此操作,请参阅此黑客帖子以获取更多信息:
https://blog.mozilla.org/addons/2014/03/06/australis-for-add-on-developers-2/