Firefoxからの実行とXULRunnerからの実行の共存

単一のXULファイルをFirefoxとXULRunnerの両方から起動出来るようなファイル配置を考える。
firefox/がFirefoxというXULアプリケーションにとってのルートディレクトリで、
間借りしたfirefox/chrome//がというXULアプリケーションにとってのルートディレクトリという方針でいく。
ここでのルートディレクトリとは、直下にchromeやdefaults等のサブディレクトリが見える位置という意味。
XULアプリケーションはルートディレクトリ/chrome/*.manifestをサーチするのでそこから見たxulファイルの相対位置を指定してやればいいはず。

firefox/chrome//chrome/content/.xul

本体のXULファイル
http:ではindex.htmlというファイル名だと省略が可能なように、chrome:ではパッケージ名と同じファイル名だと省略が可能。

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<caption label="Hello World"/>
</window>

firefox/chrome//chrome/chrome.manifest

XULRunner側にを見つけてもらうためのファイル
他のmanifestファイルとファイル名が衝突する心配がないので、chrome.manifestの決めうちでいい。

content <package> file:content/

firefox/chrome//defaults/preferences/pref.js

これもXULRunner側のためのファイル
イメージ的にはFirefox側ならchrome://browser/content/を指定している感じ?

pref("toolkit.defaultChromeURI", "chrome://<package>/content/");

firefox/chrome//application.ini

xulrunner.exeの引数に与えるファイル

[App]
Vendor=katona
Name=<package>
Version=0.1
BuildID=20080502

[Gecko]
MinVersion=1.8
MaxVersion=1.9.0.*

firefox/chrome/.manifest

Firefox側にを見つけてもらうためのファイル
他のmanifestファイルとファイル名が衝突しないように、ファイル名を.manifestにする。

content <package> file:<package>/chrome/content/

Application Data/Mozilla/Firefox/Profiles/???.default/user.js

再起動無しにXULの変更を反映させるために以下を追加。
pref()とuser_pref()のどちらを使うのが正解なのかは不明。

user_pref("nglayout.debug.disable_xul_cache", true);

chrome URIについて

chrome URL の基本的な構文は、以下になります。
chrome:////
は、「messenger」や 「editor」といったパッケージ名を示すテキストになります。 また、 は、アクセスしたいパートによって 「content」、「skin」、「locale」からどれかを選択します。 最後の は単純にファイル名に対応します。

http://developer.mozilla.org/ja/docs/XUL_Tutorial:The_Chrome_URL

chrome:のURIでは、何のパッケージの何のパートの何のファイルということを表現するものであって、
http:やftp:やfile:等とは違ってスラッシュの区切りがディレクトリの階層構造を表しているわけではない点に注意。

追記

1. 新しいディレクトリをどこかに作成します。 例として、Windows マシンで、C:\testfiles を使用することにします。
2. Firefox がインストールされているディレクトリにある chrome ディレクトリに test.manifest という名前で新しいファイルを ASCII1 形式で作成します 。 実際には、.manifest 拡張子になってさえいればよいため、(拡張子を除いた) ファイル名の部分は重要ではありません。
3. そのファイルに以下の行を加えます。
content tests file:///C:/testfiles/

http://developer.mozilla.org/ja/docs/XUL_Tutorial:Manifest_Files

結局これだけでよかったんじゃん。
1.XULRunnerで動かすことだけ考えてC:\testfilesディレクトリで作業。
2.firefox/chrome/test.manifestで、C:\testfilesを絶対パス指定。