Mozilla の技術を組み込むためのフレームワークは、かって GRE (Gecko Runtime Environment) と呼ばれました。この埋め込み(embedding)フレームワークによって、アプリケーションは互換性のある Gecko ランタイムの場所を突きとめ、そのインストール場所を事前に知らなくても、それを埋め込むことが可能になります。この文書は、埋め込みを意図する者が、動的に GRE にリンクする方法を解説します。GREの登録方法については、GRE Registration を参照してください。
"XUL Runtime Environment" を表す XRE プロジェクトは、XULRunnerに変わりました。
Mozilla Suite: 旧 GRE
GRE には 2 つの異なる形態があります。: "旧" GRE は Mozilla application suite の一部です。 Mozilla 1.4 から 1.7.x の Windows インストーラでは、これがインストールされていました。Linux 向けには、公式に公開された GRE はありませんが、Red Hat などのさまざまな業者が、インストールされた Mozilla を GRE として登録していました。Mac 上の Mozilla suite は GRE をサポートしていません。
XULRunner: 新 GRE
XULRunner は GRE の新しいバージョンであり、埋め込みができるだけでなく、Firefox などの完全な XUL アプリケーションを起動することができます。 XULRunner は 3 つの主要なプラットホームのすべて (Windows および Mac, Linux)で埋め込みをサポート、またはサポートが計画されています。
アプリケーションのソースコードから GRE を探る
xpcom.dll への直接リンクを避ける
アプリケーションが GRE を使おうとする場合、確実に正式のライブラリに対してリンクするための入念な手順をとならければいけません。直接 <tt>xpcom.dll/libxpcom.so</tt> (<tt>xpcom.lib</tt> import lib) にリンクした場合、アプリケーションは、その PATH
に xpcom.dll がないと起動しません。これはランタイムが実行時にダイナミックに互換性のある GRE を検索するのを阻害します。
互換 GRE の検索
互換 GRE を検索するには、(xpcom/glue/standalone/nsXPCOMGlue.h
で宣言されている) GRE_GetGREPathWithProperties()
関数を使うべきです。これは embedder が適した GRE のバージョンの指定、そして GRE が持たなければならない特別な機能 (現在特別な機能は定義されていない) の指定を可能にします。
Statically link to xpcomglue.lib (the "standalone glue")
The solution is to statically link against <tt>xpcomglue.lib</tt>, also known as the "standalone glue" (see XPCOM Glue). This library provides a layer of indirection between embedding code and XPCOM. To use the XPCOM glue, you must follow these steps:
- Compile your code with
XPCOM_GLUE
defined. - Link with <tt>xpcomglue.lib</tt> (not <tt>xpcomglue_s.lib</tt>!). Don't link against the NSPR libs.
- Find a compatible GRE (see above).
- Dynamically link to that GRE using the
XPCOMGlueStartup()
function. See environment variables below. - Initialize XPCOM and do your work; when finished, shut down XPCOM.
- Unlink XPCOM with
XPCOMGlueShutdown()
.
Dependent libraries and environment variables
The XULRunner GRE is designed so that the embedder does not need to set any environment variables such as PATH
or LD_LIBRARY_PATH
before calling XPCOMGlueStartup()
, because it dynamically loads the correct dependent libraries. Unfortunately, the Mozilla suite-based GRE is not as forgiving, especially on Linux. Embedders will need to set the LD_LIBRARY_PATH
environment variable and start a new process in order to embed a suite-based GRE correctly.