Visit Mozilla.org

Chrome Registration

出典: MDC


目次

[編集] Chrome (クロム) とは ?

Chrome とは、アプリケーションウィンドウで、そのウィンドウのコンテンツ領域の外側にあるユーザーインターフェイス要素のセットのことです。 ツールバーやメニューバー、プログレスバー、およびウィンドウタイトルバーといった要素は、全て chrome の部分の典型的な例になります。

[編集] Chrome プロバイダ

ある種類のウィンドウ (例: ブラウザ用ウィンドウ) のための chrome の供給元を、chrome プロバイダと呼びます。 特定のウィンドウに対して、ツールバー上に表示する画像から利用するテキストを記述したファイルまで、 コンテンツとウィンドウ自身の外観のための完全な chrome のセットを供給するために、 複数のプロバイダが一緒に動作することになります。

chrome プロバイダの 3 つの基本型を以下に示します。

[編集] コンテント

ウィンドウを記述するための主要なソースファイルは、コンテントプロバイダから供給されます。 これらは Mozilla の中から参照可能な任意の種類のファイルであることが可能ですが、 典型的には、ウィンドウやダイアログを記述するために設計されている XUL ファイルになります。 また、ユーザーインターフェイスを定義する JavaScript ファイルもコンテントパッケージに含まれ、 ほとんどの XBL バインディングファイルも同様です。

[編集] ロケール

ローカライズ可能なアプリケーションは、全てのローカライズのための情報をロケールプロバイダに保持します。 これにより、翻訳者は別の chrome パッケージを差し込むだけで、ソースコードのそれ以外の部分を変更することなく、アプリケーションの翻訳を行うことが可能になります。 ローカライズ可能な主なファイルは、DTD ファイルと Java スタイルのプロパティファイルの 2 つになります。

[編集] スキン

スキンプロバイダは、chrome の視覚的な外観を記述するための、完全なファイルのセットを提供する役割を持っています。 典型的なスキンプロバイダは、CSS ファイルと画像を提供することになります。

[編集] Chrome レジストリ

Gecko の実行環境は、chrome レジストリとして知られる、chrome パッケージ名から chrome パッケージのディスク上の物理的な位置へのマッピングを提供するサービスを保守しています。

この chrome レジストリが、コンフィグ可能で永続的であるため、 利用者は異なった chrome プロバイダをインストールして、好みのスキンやロケールを選択することが可能になります。 これは、xpinstall と、拡張マネージャによって実現されます。

利用可能な chrome の chrome レジストリの情報のために、テキストのマニフェストが使用されます。 このマニフェストは、拡張機能やテーマのルートに置かれた「chrome.manifest」であり、XULRunner アプリケーションの chrome/*.manifest に該当します。

このプレインテキストの chrome マニフェストは、以下のような単純な行ベースのフォーマットになっています。 各行は個々に解釈されます。 つまり、その行が chrome レジストリにとって解釈可能な場合は、その行で指定される動作を行い、 不可能な場合 chrome レジストリはその行を無視します。 (警告メッセージが実行時エラーのコンソールに出力されます)

locale packagename localename path/to/files
skin packagename skinname path/to/files

[編集] マニフェスト命令 (Instruction)

[編集] コメント

文字 '#' で始まる行はコメントです。 その行のそれ以降の文字は全て無視されます。

# this line is a comment - you can put whatever you want here

[編集] content

この行により、コンテントパッケージが登録されます。

content packagename uri/to/files/ [flags]

これによって、URI chrome://packagename/content/... によって参照された場合に実際のファイルシステム上の場所を解決するための情報が登録されます。 URI は、絶対指定か、このマニフェストファイルからの相対パスを指定します。 この URI 指定は、'/' で終了している必要があることに注意してください。

[編集] locale

この行により、ロケールパッケージが登録されます。

locale packagename localename uri/to/files/ [flags]

これによって、URI chrome://packagename/locale/... によって参照されるロケールパッケージを登録します。 localename は、「en」のように言語だけの識別子か、「en-US」のような「言語-国」の識別子になります。 もし、そのパッケージに複数のロケールが登録されている場合、 chrome レジストリは、利用者の設定に最もふさわしいロケールを選択して利用することになります。

【訳注: 日本語の場合のロケール名について】

Firefox 1.5 以上は上位互換性を持っており、ja であろうが ja-JP であろうが問題なく動作します。 但し、*.manifest は ja/ja-JP-mac 世代の製品でしか使いませんから、contents.rdf でどうするかにかかわらず、ja を使用することを推奨します。

Firefox/Thunderbird 1.5 以降での locale の選択は

  1. general.useragenet.locale に完全一致するものがあればそれを使用
  2. 完全一致ではないが言語コードが一致するものがあればそれを使用
  3. 言語コードが一致するものがなければ en-US を使用

という規則になっているので、拡張機能側では ja でも ja-JP でも好きな方を指定して動作上問題ありません。 Firefox/Thunderbird 1.5 以降しかサポートしないのに ja-JP を指定するというのはナンセンスですので推奨しませんが、Firefox/Thunderbird 1.0.x や Seamonkey 1.0.x などもサポートするのであれば ja でも ja-JP でも構いません。

Mozilla L10N フォーラムの記事 から引用

[編集] skin

この行により、スキンパッケージが登録されます。

skin packagename skinname uri/to/files/ [flags]

これによって、URI chrome://packagename/skin/... によって参照されるスキンパッケージを登録します。 skinname にはインストールされるスキンを識別する適当な文字列を指定します。 もし、そのパッケージに複数のスキンが登録されている場合、 chrome レジストリは、利用者の設定に最もふさわしいスキンを選択して利用することになります。

[編集] overlay

XUL オーバーレイは、以下の構文で登録されます。

overlay chrome://URI-to-be-overlaid chrome://overlay-URI [flags]

[編集] style

スタイルオーバーレイ (chrome ページに適用するためのカスタム CSS) は、以下の構文で登録されます。

style chrome://URI-to-style chrome://stylesheet-URI [flags]

この機能はChrome URIのスタイルシートについてだけ利用できることに注意してください。

[編集] override

拡張機能や embedder で、アプリケーションや XULRunner が提供しているファイルをオーバーライドしたくなるケースがあります。 これは、chrome 登録マニフェストの 「override」命令で可能になります。

override chrome://package/type/original-uri.whatever new-resolved-URI [flags]

[編集] resource

Firefox 3 の新機能

JavaScriptコードモジュール を利用する場合、拡張機能やアプリケーションがComponents.utils.importを使用してモジュールを読み込めるようにするために、resourceプロトコルのエイリアスを作成する必要があるでしょう。エイリアスはresource行を使うことによって作られます:

resource エイリアス名 uri/to/files/ [flags]

これはresource://<エイリアス名>/というURIに対して、与えられたパスへのマッピングを行います。

Web上のコンテンツをresource URIから読み込むことを防ぐようなセキュリティ上の制限事項は無いことに注意が必要です。ここで何を可視化しようとしているのかについて注意を払ってください。

[編集] マニフェストフラグ

マニフェストの行は、空白区切りにより複数のフラグを持つことができ、 それらは登録行の最後に追加します。 これらのフラグは、そのパッケージの chrome に特殊な属性をマークしたり、 その行が使用される条件を制限するために使用されます。

[編集] application

拡張機能は、複数のアプリケーションに対してインストールされる可能性があります。 特定のアプリケーションだけに適用する chrome 登録行を置きたい場合には、

application=app-ID

のフラグによって、拡張機能が app-ID で識別されるアプリケーションの実行に対してインストールされる場合にのみ、この命令を適用することを示します。 複数の application フラグを単一の行に含めても構いません。 その場合は、その中のいずれかが一致した場合に適用されることになります。

[編集] appversion

拡張機能は、アプリケーションの複数のバージョンに対してインストールされる可能性があります。 特定のバージョンだけに適用する chrome 登録行を置きたい場合には、

appversion=version
appversion<version
appversion<=version
appversion>version
appversion>=version

のフラグによって、拡張機能が識別されたバージョンのアプリケーションにインストールされる場合にのみ、この命令を適用することを示します。 複数の appversion フラグを単一の行に含めても構いません。 その場合は、その中のいずれかが一致した場合に適用されることになります。 なお、バージョン文字列は、Toolkit version format に従っている必要があります。

[編集] contentaccessible

Firefox 3 の新機能 Untrusted content is no longer allowed to reference resources in chrome packages. If this needs to be explicitly allowed, set the contentaccessible flag to yes for behavior as found in older versions.

The contentaccessible flag applies only to content packages: it is not recognized for locale or skin registration. However, the matching locale and skin packages will also be exposed to content.

[編集] os

Firefox 3 の新機能 拡張機能(およびテーマ)は、Firefoxが動作しているオペレーティングシステムに依存した異なる機能を提供することができます。

os=WINNT
os=Darwin

OSの名前のすべてのリストはinstall.rdf#targetPlatformを参照してください。OSの名前は大文字小文字は区別されません。

[編集] osversion

Firefox 3 の新機能 拡張機能あるいはテーマは動作しているオペレーティングシステムのバージョンによって異なる挙動を示す必要に迫られることがあります。例えば、あるテーマでMac OS X 10.5(以降)用に、10.4(以前)とは異なる外観を適用したい場合はこのようになります:

osversion>=10.5

[編集] platform (プラットフォーム固有パッケージ)

パッケージの中には、プラットフォーム固有を示すために専用のフラグでマークされているものがあります。 このようなパッケージでは、コンテント、スキン、ロケールのうちのいくつかのパートが、実行されているプラットフォームによって異なっているために、 「Windows と OS/2」、「Macintosh」、「Unix 系」のプラットフォームのために、3 セットの異なるファイルが含まれることになります。 例えば、ダイアログの「OK」と「キャンセル」ボタンの並び順は、プラットフォームによって異なります。 また同様にいくつかの項目の名前も異なっています。

「platform」修飾子は、コンテントの登録の場合のみ解釈され、ロケールとスキンの登録では行われません。 しかしながら、このフラグはパッケージの content、locale、skin のどのパートに対しても、指定されれば適用されます。

そのパッケージがプラットフォーム固有であることを示すためには、 以下の例のように「platform」修飾子を「content」行のパス指定の後に置きます。

content global-platform jar:toolkit.jar!/toolkit/content/global-platform/ platform

これを作成するマニフェストで指定すると、global-platform ディレクトリ以下には、 win (Windows/OS2)、 mac (OS9/OSX)、 unix (それ以外の全て) のサブディレクトリを置く必要があります。 これらのサブディレクトリ以外に置かれた任意のファイルは、全て無視されます。

[編集] xpcnativewrappers

Chrome パッケージでは、悪意のあるコンテンツにアクセスした場合に、それらからパッケージのコードを保護するために、 セキュリティのメカニズムである xpcnativewrappers を使用するかどうかを決めることができます。 詳細については、chrome から コンテントの DOM に安全にアクセスする方法を参照してください。

Firefox 1.5 のアルファリリース (Deer Park alphas) では、このフラグはデフォルトで OFF であったため、xpcnativewrappers=yes を指定して、明示的に有効にする必要がありました。

Firefox 1.5 の最初のベータリリースからは、このフラグはデフォルトで有効になったため、 コンテンツのオブジェクトに対してセキュアでないアクセスが必要な拡張機能では、xpcnativewrappers=no を指定する必要があります。

xpcnativewrappers フラグは、コンテントパッケージのみに適用され、 ロケールとスキンの登録では識別されません。

[編集] Chrome マニフェストの例

content       necko                   jar:comm.jar!/content/necko/ xpcnativewrappers=yes
locale	       necko       en-US       jar:en-US.jar!/locale/en-US/necko/
content       xbl-marquee             jar:comm.jar!/content/xbl-marquee/
content       pipnss                  jar:pipnss.jar!/content/pipnss/
locale        pipnss      en-US       jar:en-US.jar!/locale/en-US/pipnss/
# Firefox-only
overlay chrome://browser/content/pageInfo.xul           chrome://pippki/content/PageInfoOverlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}
overlay chrome://communicator/content/pref/preftree.xul chrome://pippki/content/PrefOverlay.xul
overlay chrome://navigator/content/pageInfo.xul         chrome://pippki/content/PageInfoOverlay.xul application=seamonkey@applications.mozilla.org
content       pippki                  jar:pippki.jar!/content/pippki/ xpcnativewrappers=yes
locale        pippki      en-US       jar:en-US.jar!/locale/en-US/pippki/
content       global-platform         jar:toolkit.jar!/content/global-platform/ platform
skin          global      classic/1.0 jar:classic.jar!/skin/classic/global/
override chrome://global/content/netError.xhtml jar:embedder.jar!/global/content/netError.xhtml
content       inspector               jar:inspector.jar!/content/inspector/ xpcnativewrappers=no

[編集] 古い contents.rdf 形式のマニフェスト

プレインテキスト形式のマニフェストの導入 (Firefox 1.5 と Toolkit 1.8 で実施) より前には、"contents.rdf" という名称の RDF によるマニフェストが chrome の登録のために使用されていました。 この形式は非推奨です。 しかしながら、Mozilla スイート (SeaMonkey) は、プレインテキスト形式のマニフェストをまだサポートしていないため、 Firefox 1.0 に対する後方互換性の維持や、Mozilla スイート への対応が必要な拡張機能では、contents.rdf マニフェストが必要になります。

[編集] Toolkit API 公式リファレンス