言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

xul 再び

去年 http://d.hatena.ne.jp/propella/20040826 少しだけ実験していた xul で再び遊んでみた。やりたい事は、FireFoxプラグインがどういう構造をしているかを調べる事。まず前回と同じ Hello World だが意味無くカラーピッカーをくっつける。例えば c:\takasi\doc\mozilla\hello というディレクトリに hello.xul というファイルを作る。

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="hello" title="Hello world"
  xmlns:html="http://www.w3.org/1999/xhtml"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<label value="Hello world!"/>
<colorpicker id="cp" onclick="doSomethingUseful(this);"/>
</window>

このファイルを firefox に関連付けて、ダブルクリックで開く事を確認してから、同じファイルに contents.rdf というファイルを作る。ここから注意が必要で、RDF:li の resource と RDF:Description の about, name の三箇所にはプログラムの名前(フォルダの名前)を小文字で記述する。

<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
  <RDF:Seq about="urn:mozilla:package:root">
    <RDF:li resource="urn:mozilla:package:hello"/>
  </RDF:Seq>
  <RDF:Description about="urn:mozilla:package:hello"
          chrome:displayName="Hello world"
          chrome:author="Hello Taro"
          chrome:name="hello"
          chrome:extension="true"/>
</RDF:RDF>

C:\Program Files\Mozilla Firefox\chrome\installed-chrome.txt (windows の場合) に以下の行を追加。最後のスラッシュが必要な事と、小文字を使う事に注意。この URL は xul ファイルを firefox で開いてみて確認する事が出来る。

content,install,url,file:///c|/takasi/doc/mozilla/hello/

C:\Program Files\Mozilla Firefox\chrome\chrome.rdf を削除後、FireFoxchrome://hello/content/hello.xul を入力して見られる事を確認。contents.rdf を正確に書くことと、プログラムの名前を全部小文字で書く所でつまずいて一日費やしてしまった。何をやっているのだ俺は!!!ここまで出来れば後は http://www.xulplanet.com/tutorials/xultu/チュートリアルを読んでさくさく進めるはずだ。

今回 xul に着目したのは、ある環境の UI を、その環境での文書として表現するにはどうすれば良いかを調べるためだ。例えば firefoxchrome://browser/content/browser.xul にアクセスすれば良くわかる。firefox の中にもう一つ firefox が現れる。面白い!!つまり、firefox の UI 自体が xul 文書として表現されている。