Thunderbirdアドオンの作り方(その2:chrome.manifest)

Thunderbirdアドオンの作り方(その2:chrome.manifest)

Posted at February 1,2018 12:03 AM
Tag:[Thunderbird]

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がどのウィンドウに対応しているかは不明)。

mailnews - DXR

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/
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)