這不是你可以用可用的附加SDK API做的事情,有很好的理由 - 附加組件不應該浪費屏幕空間不必要的東西,並且添加工具欄就是這樣。您可以通過使用低級模塊並直接訪問瀏覽器的XUL來實現此目標。像這樣的東西應該工作(未經測試的代碼和非常哈克):
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>
。
試圖使用你的建議,我意外地創建了兩個工具欄具有相同的名稱。現在工具欄佈局...呈灰色顯示。我可以在哪裏刪除我的兩個同名的自定義工具欄? – 2012-04-18 13:13:46
沒關係刪除重複項。我關閉了Firefox並重新打開它,它合併了兩個具有相同名稱的工具欄(或者至少刪除了第二個)。 – 2012-04-18 13:23:52
好的,我把它放到我的代碼中,但它只能成功地創建自定義工具欄並從附加工具欄中刪除該小部件。該小部件從不出現在新的自定義工具欄上。 – 2012-04-18 13:51:47