トップページへ

Thunderbirdアドオンの作り方(その3:コンテントプロバイダ - XUL)

小粋空間 » Thunderbird » 開発 » Thunderbirdアドオンの作り方(その3:コンテントプロバイダ - XUL)

Thunderbirdアドオンの作り方について解説します。その3はコンテントプロバイダのXULです。

サンプルでは1つのXULファイルを提供しているので、サンプルを使ってファイルの設定内容について解説します。

サンプルは「その1」からダウンロードできます。

1.XULとは

XUL(ズール:XML User Interface Language)とは「ユーザインタフェースを記述するための言語」です。

サンプルのXULは次のようになっています。

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://test/skin/test.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://test/locale/menu.dtd">
<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
  <toolbar id="mail-bar3">
    <toolbarbutton id="button-new-reply" label="&test.label;" class="toolbarbutton-1" tooltiptext="Reply but new" position="3" removable="true" oncommand="foo(this)" />
  </toolbar>
  <script type="application/x-javascript" src="test.js" />
</overlay>

ごちゃっとしていて分かりにくいですが、キモとなる部分は下記の4行です。

  <toolbar id="mail-bar3">
    <toolbarbutton id="button-new-reply" label="&test.label;" class="toolbarbutton-1" tooltiptext="Reply but new" position="3" removable="true" oncommand="foo(this)" />
  </toolbar>
  <script type="application/x-javascript" src="test.js" />

この部分でThunderbirdにボタンを表示します。

HTMLを知っている方であればとっつきやすいのではないかと思います。

それでは各要素について解説します。

1.XML宣言

XULはXMLなので、1行目にXML宣言を記載します。

<?xml version="1.0"?>

2.xml-stylesheet宣言

コンテントプロバイダで利用するスタイルシートを設定します。スタイルの設定が必要なければこの行は不要です。

<?xml-stylesheet href="chrome://test/skin/test.css" type="text/css"?>

href属性は"chrome://test/skin/test.css"となっていて、拡張機能のディレクトリ構造に示す、

test@hoge.com
├chrome
│ ├ skin
│ │ ├ test.css★

を指していますが、パスそのものを指定している訳ではなく、

の2つによって、chrome.manifestの

skin test classic/1.0 chrome/skin/

を参照し、href属性の"test/skin"の部分を"chrome/skin/"に変換します。

つまり、

chrome://test/skin/test.css

chrome/skin/test.css

を指していることが分かります。

3.DOCTYPE宣言

ロケールを設定します。ロケールの設定が必要なければこの行は不要です。

<!DOCTYPE overlay SYSTEM "chrome://test/locale/menu.dtd">

"chrome://test/locale/menu.dtd"の部分はさきほどのスキンプロバイダと同様、

ですが、ユーザーに最適なローカライズ(ここでは日本語)を行うので、

test.manifest

locale test ja locale/ja/

が読み込まれ、"test/locale"の部分を"locale/ja/"に変換します(1階層上の"chrome"はchrome.manifestから継承)。

つまり、

chrome://test/locale/menu.dtd

chrome/locale/ja/menu.dtd

を指していることが分かります。

4.overlay要素

その2:chrome.manifestで解説したとおり、コンテントプロバイダは「既存のXULにオーバーレイする」ということなので、オーバーレイしたい内容をこの要素で括ります。

<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 :
</overlay>

id属性は任意の値、xmlns属性は固定値らしいので、ここに記載された内容をそのまま利用します。

5.toolbar要素

toolbar要素は、Thunderbirdの「受信」「作成」「返信」などのメニューが並んでいるツールバーを指します。

6.toolbarbutton要素

toolbarbutton要素はツールバーの中のボタンを指します。

各属性の意味は次のとおりです。

7.script要素

oncommand属性で起動する関数やイベントハンドラなど、動作させるJavaScriptファイルをここに記述します。

  <script type="application/x-javascript" src="test.js" />

8.要素を探す方法

サンプルではツールバーの要素がtoolbarやtoolbarbuttonと分かっている状態で説明しましたが、そもそも機能追加したい部分の要素がわからないと開発できません。

要素を知るには、DOM InspectorとInspectorWidgetをペアで利用することをおすすめします(詳細は割愛)。

あるいは、開発したい部分の他の拡張機能をダウンロードして解析する手もあるでしょう。

ちなみにステータスバーは次のようなXULになります。

<statusbar id="status-bar">
    <statusbarpanel id="my-panel" label="Date"/>
</statusbar>

メニューバーは次のようなXULになります。

<menubar id="mail-menubar">
    <menu label="foo">
        <menupopup id="foo-popup">
            <menuitem label="aaa"/>
            <menuitem label="bbb"/>
            <menuitem label="ccc"/>
        </menupopup>
    </menu>
</menubar>

« 前の記事へ

次の記事へ »

トップページへ