これは、利用可能なアドオン 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>
.