<toolbox> <toolbar> <toolbarbutton label="AAA" /> <toolbarbutton label="BBB" /> </toolbar> </toolbox>ツールバー - XUL | MDN
これは次のように表示されます。
なお、toolbox要素はtoolbar要素のコンテナです。toolbox内に配置しなくてもtoolbarは機能しますが、たいていこのような構成とします。
<toolbox> <toolbar> <toolbarbutton label="Menu" type="menu" /> <toolbarbutton label="Menu-button" type="menu-button" /> <toolbarbutton label="Checkbox" type="checkbox" /> <toolbarbutton label="Radio1" type="radio" group="foo" /> <toolbarbutton label="Radio2" type="radio" group="foo" /> <toolbarbutton label="Radio3" type="radio" group="foo" /> </toolbar> </toolbox>
ボタンのクリックによりメニューを表示するには、toolbarbuttonのtype属性をmenuかmenu-buttonとして、その要素内にmenupopup要素を配置します。
<toolbox> <toolbarbutton label="Menu" type="menu-button"> <menupopup> <menuitem label="A" value="foo" /> <menuitem label="B" value="bar" /> </menupopup> </toolbarbutton> </toolbox>
ブラウザのウィンドウに表示するためには、toolbarpalette要素のid属性はBrowserToolbarPaletteとします。また、ツールバーの表示方法で「アイコンとテキスト」が選択されたときに適切な配置で表示されるように、toolbarbutton要素のclass属性はtoolbarbutton-1とします。
<toolbarpalette id="BrowserToolbarPalette"> <toolbarbutton id="testToolButton" class="toolbarbutton-1" label="TEST" tooltiptext="sample button" oncommand="alert('ABC')" /> </toolbarpalette>
これをXUL文書に記述するときは、このtoolbarpalette要素はoverlay要素の直接の子要素とします。window要素の子要素とすると機能しません。
スタイルに指定するtoolbarbutton-1の定義はchrome://browser/skin/browser.cssにあり、その一部は次のような内容です。
.findbar-button, #nav-bar .toolbarbutton-1, #nav-bar .toolbarbutton-1 > .toolbarbutton-menubutton-button { -moz-appearance: none; border: none; padding: 0; background: none; }
またchromeclass-toolbar-additionalのそれは、chrome://global/content/xul.cssにあります。
/* ::::::::::
:: Rules for 'hiding' portions of the chrome for special
:: kinds of windows (not JUST browser windows) with toolbars
::::: */
window[chromehidden~="menubar"] .chromeclass-menubar,
window[chromehidden~="directories"] .chromeclass-directories,
window[chromehidden~="status"] .chromeclass-status,
window[chromehidden~="extrachrome"] .chromeclass-extrachrome,
window[chromehidden~="location"] .chromeclass-location,
window[chromehidden~="location"][chromehidden~="toolbar"] .chromeclass-toolbar,
window[chromehidden~="toolbar"] .chromeclass-toolbar-additional {
display: none;
}
まずボタンの画像を用意します。この画像には大小2種類が必要です。Icon size - Creating toolbar buttons (Customize Toolbar Window) - Mozilla | MDN
ちなみにアドオンのアイコンとなる、アドオンマネージャのアイコンとAMOでの公開用のアイコンは、これとはまた異なるサイズとなります。
ボタンに画像を表示するにはスタイルシートで指定します。IDセレクタの値には、toolbarbutton要素のid属性の値を指定します。
/* 通常のアイコン */ #testToolButton { list-style-image: url( chrome://myPackage/skin/star.png ); } /* [小さいアイコンを使用]が選択されたときのアイコン */ toolbar[iconsize="small"] #testToolButton { list-style-image: url( chrome://myPackage/skin/bell.png ); }
そして、このスタイルシートが「ブラウザ」と「ツールバーのカスタマイズ」ウィンドウにオーバーレイされるように指定します。Applying the stylesheet - Creating toolbar buttons (Customize Toolbar Window) - Mozilla | MDN
これをchrome.manifestで指定するならば、次のように記述します。
# ブラウザ ウィンドウ style chrome://browser/content/browser.xul chrome://myPackage/skin/bar.css # ツールバーのカスタマイズ ウィンドウ style chrome://global/content/customizeToolbar.xul chrome://myPackage/skin/bar.css
ブラウザへのオーバーレイはクロスパッケージ オーバーレイでも行えるため、それでオーバーレイしたXUL文書からxml-stylesheet処理命令で読み込む方法もあります。それにはchrome.manifestで次のようにオーバーレイを指示し、
overlay chrome://browser/content/browser.xul chrome://myPackage/content/sample.xul
XUL文書では、次のようにCSSファイルを読み込みます。
<?xml-stylesheet type="text/css" href="chrome://myPackage/skin/bar.css"?>
ツールバーボタンのイベントは、必ず属性イベントリスナで登録します。それはtoolbarbutton要素がツールバーに表示されていない状態では、getElementById()などでノードを取得できず、スクリプトからイベントを登録できないためです。