XPConnect (スクリプト可能なコンポーネント)

概要

XPConnect は、XPCOMJavaScript を、お互いにかんたんに操作できるようにする技術です。 XPConnect は、JavaScript オブジェクトが透過的に XPCOM オブジェクトにアクセスし、操作できるようにします。それはまた、JavaScript オブジェクトが、XPCOM オブジェクトから呼ばれることができる、XPCOM にしたがうインターフェイスを持つことを可能にします。その主な目標は、XPCOMスタイルのインターフェイスの片側からコミュニケーションするオブジェクトが、そのインターフェイスの反対側にいるオブジェクトの実装言語を知ったり気にしたりする一般的な必要をなくす、ということです。

XPConnect の第一の存在理由は、ネイティヴ・コードが JavaScript コードとやりとりする必要があるところで使われている、手書きのコードを置きかえることです。その例は、ドキュメント・オブジェクト・モデル(DOM)とSmart Update モジュールです。この問題に対する暫定的なソリューションが、Mozilla のなかで現在使われています。そのソリューションは、IDL コンパイラ(idlc)を使って Cのソース・コードを大量に生成し、JSAPI を使うJavaScript ランタイムにオブジェクトを反映させています。そしてそのソースは、コンパイルされてMozilla のバイナリになります。XPConnect は、はるかに少ないコードの足あとで、よりダイナミックなソリューションをもたらします。

XPConnect はまた、XPCOM とJavaScript のオブジェクトがあたらしいところで相互作用することを可能にしています。XPFE は、DOM ウィジェットの「トラディショナルな」セットをはるかに超えたネイティヴ・ウィジェットの巨大な集まりと、JavaScript が相互作用することを要求しています。XPCOM オブジェクトの数や機能が増えてくるにしたがって、わたしたちは、JavaScript アプリケーションを(ブラウザの内側と外側の両方で)作るのに使えるオブジェクトをそなえた進化するツールキットを手に入れることになります。わたしたちはまた、ネイティヴな XPCOM ウィジェットと同じように使えるカスタム・ウィジェットを、JavaScript を使って作るということも想像できます。

目標でないもの

XPConnect は(少なくともその最初の誕生時点では)マイクロソフトの COM オブジェクトのスクリプティングは直接サポートしていませんIDispatch インターフェイスはサポートしていません。XPIDL で宣言されていないインターフェイスをもつ XPCOM オブジェクトのスクリプティングはサポートしていません。XPCOM の規約を破る XPCOM オブジェクトのスクリプティングはサポートしていません。規約を破るというのは、不正な戻り値や、C++デフォルトの引数、与えられたインターフェイスを実装するC++タイプのオブジェクトがあると思い込むこと、といったものです。

XPConnect は、JavaScript 以外の言語へのマッピングはサポートしようとしていません。XPIDL コンパイラは、JavaScript へのマッピングに必要な C++固有のヘッダとバイナリの typelib を生成します。誰かがコンパイラを拡張すれば、別のフォーマットを生成したりできるかもしれないし、そして/あるいは、既存の typelib を使って別の言語にマップできるようにするための糊付けコードを書くこともできるかもしれません。しかし、そういうことは XPConnect の目標ではありません。

アーキテクチャ

XPConnect といっしょにはたらくためには、XPCOM インターフェイスは XPIDL を使って宣言されなければなりません。 これは CORBA IDL をベースにした言語で、そこに上乗せされた XPCOM とXPConnect の要求をサポートするためにいくらか拡張したものです。XPIDLコンパイラは、C++ のヘッダファイルと XPConnect の typelib ファイルを生成するのに使われます。 C++ のヘッダファイルは、すべての XPCOM インターフェイスについて現在は手書きされているヘッダファイルと機能的には同じものです。typelib ファイルは、XPConnect の糊付けコードが実行時に代理オブジェクトをダイナミックに生成してメソッド呼び出しを転送し、XPCOM と JavaScript のオブジェクト間アクセスが適切に扱われるようにします。大部分の XPCOM インターフェイスについて、これはまったく透過的になるでしょう。またこのシステムは nsIXPCScriptable インターフェイスをサポートしていて、これは特にスクリプティングの必要がある XPCOM オブジェクトに対して、自分が JavaScrip オブジェクトとしてどのように表現されるかに対するより多くのコントロールを持たせることを可能にします。

ステータス (1999年6月4日現在):

XPConnect は現在、すべてのプラットフォームのビルドに含まれています。Mozilla が走るには、xptcall の移植が必要なプラットフォームもあります。RDF とメール/ニュースは XPIDL で定義されていて、AppCore モジュールの一部もそのような段階にあります。わたしたちはよりよいドキュメント作りにとりかかっており、みなさんが自分自身の新しいまたは既存のインターフェイスを XPIDL で書いてくれるよう、みなさんをプッシュし、つっついていきます。


リソース:
苦情/質問:Michael Ang <mang@subcarrier.org>
著者: John Bandhauer <jband@netscape.com>
最終更新日: 1 Feb 2000