Firefoxからの実行とXULRunnerからの実行の共存
単一のXULファイルをFirefoxとXULRunnerの両方から起動出来るようなファイル配置を考える。
firefox/がFirefoxというXULアプリケーションにとってのルートディレクトリで、
間借りしたfirefox/chrome/
ここでのルートディレクトリとは、直下に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ファイルとファイル名が衝突しないように、ファイル名を
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 の基本的な構文は、以下になります。
http://developer.mozilla.org/ja/docs/XUL_Tutorial:The_Chrome_URL
chrome:/// /
は、「messenger」や 「editor」といったパッケージ名を示すテキストになります。 また、 は、アクセスしたいパートによって 「content」、「skin」、「locale」からどれかを選択します。 最後の は単純にファイル名に対応します。
chrome:のURIでは、何のパッケージの何のパートの何のファイルということを表現するものであって、
http:やftp:やfile:等とは違ってスラッシュの区切りがディレクトリの階層構造を表しているわけではない点に注意。
追記
1. 新しいディレクトリをどこかに作成します。 例として、Windows マシンで、C:\testfiles を使用することにします。
http://developer.mozilla.org/ja/docs/XUL_Tutorial:Manifest_Files
2. Firefox がインストールされているディレクトリにある chrome ディレクトリに test.manifest という名前で新しいファイルを ASCII1 形式で作成します 。 実際には、.manifest 拡張子になってさえいればよいため、(拡張子を除いた) ファイル名の部分は重要ではありません。
3. そのファイルに以下の行を加えます。
content tests file:///C:/testfiles/
結局これだけでよかったんじゃん。
1.XULRunnerで動かすことだけ考えてC:\testfilesディレクトリで作業。
2.firefox/chrome/test.manifestで、C:\testfilesを絶対パス指定。