Thunderbirdアドオンの作り方(その2:chrome.manifest)
Thunderbirdアドオンの作り方について解説します。その2はchrome.manifestです。
簡素なアドオンであればこのファイルには数行しか記述しないのですが、ファイルや記述する内容の意味を理解していれば開発がスムーズに進むと思うので、少し詳しく解説します。
サンプルは「その1」からダウンロードできます。
1.chromeとは
そもそもファイル名に使われている「chrome」とは何でしょうか。
chromeとは、アプリケーションウィンドウのコンテンツ領域の外側にあるユーザインタフェース要素のセットを指します。
たとえば、ツールバー・メニューバー・プログレスバー・タイトルバーなどがchromeのユーザインタフェース要素になります。
Thunderbirdでは、拡張機能をインストールしたあと、拡張機能のルートディレクトリに配置したchrome.manifestを読み込みます。
2.chromeプロバイダ
Thunderbirdのウィンドウに対し、ツールバーに表示する画像やテキストファイルなど、ブラウザに供給する元になるものをchromeプロバイダと呼びます。
chromeプロバイダには下記の3種類があります。
- コンテントプロバイダ:ウィンドウを記述するための主要なソースファイル(ウィンドウやダイアログを記述するXULやユーザインタフェイスを定義するJavaScript)
- ロケールプロバイダ:全てのローカライズのための情報(DTDまたはJavaプロパティ)
- スキンプロバイダ:視覚的な外観を記述するための完全なファイルセット(CSS/画像)
説明がわかりにくいですが、要するに下記のディレクトリ構造に示す★部分にそれぞれが該当するということです。
test@hoge.com
├chrome
│ ├ content★
│ │ ├ test.xul
│ │ └ test.js
│ ├ locale★
│ │ ├ en
│ │ │ └ menu.dtd
│ │ └ ja
│ │ └ menu.dtd
│ ├ skin★
│ │ ├ test.css
│ │ └ test.png
│ └ test.manifest
├ chrome.manifest
└ install.rdf
3.chromeレジストリ
chromeレジストリは、後述するパッケージ名からパッケージのディスク上の物理的な位置へのマッピングを記述したものです。
chromeレジストリには、テキスト形式のマニフェストファイルが使用されます。 これがchrome.manifestです。
3つのプロバイダに対応する、chromeレジストリのフォーマットは次の通りです。
コンテントプロバイダ
content パッケージ名 path/to/files
この行が読み込まれることでコンテントパッケージがThunderbirdに登録されます。
具体的には、chrome://パッケージ名/content/... によって参照された場合にファイルシステム上の場所を解決するための情報が登録されます。
URIは絶対パスか、chrome.manifestからの相対パスを指定します。URIの末尾は"/"で終了します。
サンプルでは
content test chrome/content/
となっており、パッケージ名が「test」、URIは"chrome/content/"となっています。
これで
test@hoge.com
├chrome
│ ├ content★
の位置が登録されます。
ロケールプロバイダ
locale パッケージ名 ロケール名 path/to/files
この行が読み込まれることでロケールパッケージがThunderbirdに登録されます。
具体的には、chrome://パッケージ名/locale/... によって参照されるロケールパッケージを登録します。
ロケール名は、「ja」「en」のように言語だけの識別子か、「ja-JP」「en-US」のような「言語-国」の識別子です。
パッケージに複数のロケールが登録されている場合、chromeレジストリは利用者に最適なロケールを選択して利用します。
サンプルでは後述するmanifestで、
manifest chrome/test.manifest
とし、1階層下にあるtest.manifestで
locale test ja locale/ja/
locale test en locale/en/
としています。
パッケージ名が「test」、ロケールは「ja」「en」、jaのURIは"locale/ja/"、enのURIは"locale/en/"となっています。
これで
test@hoge.com
├chrome
│ ├ locale
│ │ ├ en★
│ │ └ ja★
の位置が登録されます。
chrome.manifestに下記のように直接定義することもできます。
locale test ja chrome/locale/ja/
locale test en chrome/locale/en/
スキンプロバイダ
skin パッケージ名 テーマ名 path/to/files
この行が読み込まれることでスキンパッケージがThunderbirdに登録されます。
具体的には、chrome://パッケージ名/skin/... によって参照されるスキンパッケージを登録します。
サンプルでは
skin test classic/1.0 chrome/skin/
となっており、パッケージ名が「test」、テーマ名が「classic/1.0」、URIは"chrome/skin/"となっています。
これで
test@hoge.com
├chrome
│ ├ skin★
の位置が登録されます。
パッケージに複数のスキンが登録されている場合、利用者に最適なスキンを選択して利用します。
上記プロバイダの他、サンプルでは下記の2種類のレジストリがあります。
XULオーバーレイ
コンテントプロバイダではXULファイルを使ってウィンドウのインタフェース要素(ツールバー・メニューバー・プログレスバー・タイトルバー)を定義しますが、Thunderbirdの既存XULにオーバーレイするという形をとります。
そのためにこのXULオーバーレイの記述が必要になります。
フォーマットは次の通りです。
overlay chrome://オーバーレイが適用されるURI chrome://適用するオーバーレイのURI
サンプルでは、
overlay chrome://messenger/content/messenger.xul chrome://test/content/test.xul
となっており、"chrome://messenger/content/messenger.xul"はThunderbirdのメインウィンドウを指します。
これにより、Thunderbirdがmessenger.xulを読み込んだ際、messenger.xulの中にtest.xulを統合することを伝えます。
XULの種類については下記のURLで確認できます(どのXULがどのウィンドウに対応しているかは不明)。
manifest(追加のマニフェストファイルを読み込み)
前述したロケールプロバイダで利用したレジストリで、フォーマットは次の通りです。
manifest サブディレクトリ /foo.manifest
4.サンプル
ということで、サンプルのchrome.manifestおよび、chromeフォルダ配下のtest.manifestは次のようになります。
chrome.manifest
content test chrome/content/
overlay chrome://messenger/content/messenger.xul chrome://test/content/test.xul
manifest chrome/test.manifest
skin test classic/1.0 chrome/skin/
test.manifest
locale test ja locale/ja/
locale test en locale/en/
- Thunderbirdアドオンの作り方(その6:要素を調べる)
- Thunderbirdアドオンの作り方(その5:ローカライズ)
- Thunderbirdアドオンの作り方(その4:JavaScript)
- Thunderbirdアドオンの作り方(その3:コンテントプロバイダ - XUL)
- Thunderbirdアドオンの作り方(その1:概要とinstall.rdf)