skip to content

89504e470d0a1a0a0000000d49484452000
000d7000000410803000000759cc1d90000
0300504c5445000000000008000800000808
001000001800062b0408000008000808080
0080808081000081800081c0810000810101
0102b08103121121e0a141804181818181c1
c182108182c06182d18211c1c21212121291
8232b09242927252d182646132936142957
bd295bca2a5ab22d5ea32e3e2a2f4da43131
2d313939315ab1315eb93163ca3167c9335
4903365b7356dca3668ad376cc23956b539
56c53963ca3a6cd63b44203b58ad3c609f3c
65ba3d3f3b425ab94261ce42638c4263a042
63ad426ba54456294468284573b94765aa4
768b54855374a4a4a4a5c944a63bd4c5644
4c59654d6e254d74a74e564e4e6c35506ec8
5075bd5263bd527bcf5464915468b55768a
757762f5b6b295d5f555d66445d77415d87
446181cc657259657ea8657eba696c6f6b8e
486c87ca6c8e616c8eba6f77836f92d47099c
6709f5f7779737c9cdf7d9ace7fa66a818a7d
81935481956b838cac8a8f828c948c8ca682
90a5e294a0ad95b1e597b5d498a8d098ac6

798adf399bbf49cb28aa5b2aaa5b5b5a5b5
daa5b5efa5b5f7a5bdfda5cef7a7c88ea9b8
deaabdecaac8ecadada5adadadadb77eadb
df9adca73adcef7add6b5b1b59cb1c6ffb1c
aebb3c7a2b5adb5b5b5b5b5c6adb5ceffb5
d6f7b5deffb8c28fb9d2ffbab7b7bdbdb5bd
bdbdbdc6c6bdc6ffbdcef7bdd6f7bdd6ffbd
deffbde7ffbfcadec0d3e8c1c6b9c1ce8fc5d4
9dc6c6c6c6cec6c6ceffc6d6ffc6def7c6deffc
6e7ffcadbaecbd3f7cec6d6ceced2ced6efced
6ffcedeffcee7ffceefffd2deefd4e0a8d6d6ced
6d6d6d6def7d6e2fbd6e7ffd6efffd6f7ffd6ff
ffdaefb3dededededeffdee7ffdeefc6deeff7d
eefffdef7ffdeffffe2f3c6e7e7e7e7e7ffe7efefe
7eff7e7f7efe7f7f7e7f7ffe7ffffe9f3afe9fcc0e
beffbebfbefecf4e4efe7efefefefefefffeff7e7ef
f7f7eff7ffeffbceefffe7efffefeffff7effffff1fcc
0f5fdb3f7efeff7eff7f7effff7f7eff7f7f7f7f7fff
7fbdaf7ffc6f7ffcef7ffeff7fff7f7fffffbf3e7fbf
fe7ffeffffff7effff7f7fff7ffffffeffffff7ffffff000
000000000e319894f00001ab14944415478d
aed5b7b5c14d7d93e7b11d811dc55881744
c50405b122186ebb8a1005d144440ca2881

714898a881754c4265ff5d7a4899ae4cbcda
4ad9636c5e6666a2ead4d4cf3d9aa8d31016
33e935d43127437ca24e0ceb8ec1c767766cf
64bff7ccec6234a609c91ff9f2fb750067762e
67cf7b9ef77dcef3be6744f28fbb49bdffc818
7ee846a4abc7df7b433fae59e45ad37a8fb0f
22bfd64ed52baaff45feab542fa4106fdbfb0
0b0b186339689524ca047fd5c01f62df8f6b
97d06b18d84088480472ad613f55bc08165
48e10087112bfdbef249c6a1627fc20f37ee4f
8e264b0c32908825b78a46e68e68ccd3e37c
025f14028c409577fa27649a22412226caa1
b3a66d4e6cd2bd7ad5c747bbcaf8b5e700a
b2f0d3f5434912459f734cfcd2cd9bd7ac5cb
7f99efb5ee85e64211247c02f9d82f307cc617
af4e36e1a2d4a8e9f8ac42b11fd08e94918fe
b9fe53a23705ce4ef086a1813fa4e11f5b6d1
0f7c8e8752b8ba7ad59b766c5ba87defafca
db87a220ae4b95d2f5af04f36be588c3f7e32
6e65c582d98b674f5bb078f6e2f50fbdb729
ae93940f1f3e668ce5831f20a6d00d84daf57
240be4608e09000228a0a0adef495cfd257f5
51ef3dea65f2d533f0206685a1a61915c5c5d

346858d9a3d7bf68af56fbeb7a8dc4d5ed49
72f7d72c4980e419ddd48dfed92825f47e95
5ed0b266adfa9460bcdff5808890275ba812
9946e411d278050800f8484ee8123ba1395d
9561d0cb82c119904cd533c8c87b9eb9245a
b5d34638c5eabd7175714574c5bbfeedce37
16eb7bb7fc5b4cda306aefcef81d841db833
ba53ee3a57e9974758449688415bbae354c5
60502f4176c09a125f48ea96a1051ef26bd4a
fd3ac03a61e60a06cf05a41d31b450481c3a
6664fcc891912bd66f7f6fc6904b9b8654ac5
8316ae0ba9549365e96453a623cdf67bb60d
62782a07446a4c31e1a57da73aa6e88a8742
96820c641a90d7be91a37a540f969cf053f75
20da1b055e1c7280ab5edd4ef1e22418b4d8
58556f3889db5f37fcf60d1b5e7d5caf8dd62
e5cb1226ccd9a755149740c9d4aab7d99a7
29cffb0c018d5713f0210f13d007024803bfe
84b1dec0c2880904ed6e99097a194acf3460
450f7008548bd06a45c53595507bfc1637ac
5074d7823bc4c4083bcf0d96b081e8458d83
502b94c462423d46dd7a130f8804cae30f4f
07dc909afe8e7475fbe32322085cdf223d750

ce15a5954dd0a86842c63ef2bc32a214064c
c855c2507fd4380ac95380d5edf6abea3418
7d210756a003b888029b107a98b6acb6218
7a43b858a0e3ec72931e814e0a64d7596dbe
bfc6e22c468973ebfc130a41818b278dded6
3ea4422f6f89d1c34c6933ed0879e8ea14136
003430dc30ac1e461d718357f901e4029a80
4743c71beed41828a800e397141b830aa68a
9316b005f83548f9680804b151b00a04b481
109a145914e9359802c818d05e79e1d303e9
2e0b349faebd65cbc7cf318b1efb68a0a5b9
07195dfd7dba2372838e68c23403bdf0a091
e8fa8897a49283a484d6756caf7c10548e082
1037789417ce4de53c4e3f7cb34602449055
905893e034c285d3f9310d9492e0c8ecf0c8b
ecd76f9469da5210519bef797551e652fd908
a3d1586850b3347ad596981c896ecb27041
c07da30d59afe003c30ee1a195b51053ea88
c20022141a621534cdd5580a205d401b1a1
97a3b9c0a907edefe2a1ab216113d7dca8b0
c3a1990d429b8062068832d06ba8d0193b7
227e181a86227c282aa25f8f183e302f7af31f
f7214e3e577c0c1e62fd612f209dc710bdf39

3ee7195f18cd720f701304a7b902d001dc18f
004e2f4b5d303df97c3e511669c620711886a
a4b967c128c30911d12e66894096e3be6e11
2e6384c387a0e36d10e7180254ef2fb643bef
003dc113d1ef14ecd861279f78420102d916
70dcf0cce2e2c58b17af51b615f49fedeb5e7
875fd90cc15dbb76756dc86065d84ef79724
6c5e6babaff8ab2082afedf9de789cc012bd8
59ba39a023188ce0a8abf160168fb1c38179
07b801f89abb5d803b1c9875586d2c76c04
5b89d80f0c6329c840b4a2b30959ee79c709
9b5d958fa34666dd034efef21415942adf28f
4c5c54316d01888cd90b162f580c426af6e2c
52bd7afdff0db175c5f7cbe7e211a1ce759b9
7451c5ca958b6784e9f5dab831e0e7dfdd2e
85a7d8679f3d7ee2f4e9d3b6d3365b8b956d
7997f617b7fde37d2b6bb5d96cad36077efb
94e30c98f1cfc6c69d3b1f6dded7dcfce8ce8
6c6adcf38304c7c6ea0abbffdeded362b1802
cd1c3ff4e71d3c766cadfd79c3dd4f351ffaf3
d3879edab97667e3568c437203628bdc3ed
8b2140446265806b015178785551467f62fa
ea8d850b7e1cd2fce2d5c1877dba8ccdb00d

0a5ebee7bf5a3b73edf33d8df17bca85d8e9
6ad39397979d94b2a9754ad2e9a997347e9
efe9a8379696969556af5eb6ba3267e6cc998
d028cb9ed99d299f95993cde63b0bb2b2e7
97953ed1860537713bf1bb1be1e6b2caeaea
a2654539334b4b01a33b66964dc8ce9a357
75641517e7e765959e9291cd232e05173a20
b67240ed66a33c192db46ddbe346ef3a262c
bf09171a678d318edfa735f9cdbb3674fc53
4406bcdba756bd6ac5ffffcb90d83e53ed90
528b46ccc299b9a9f9a92323d2535b7686ae
95dcf8007b13b4acb72b227e4a526644fcdc
bc9f98595bad8a91d3b6ae78d4b4f4f1f5db
0644b63e3df0824137ea75b6e7b62e3b2656
5b3b2cce6d409f9951b3762bbf08b6d8d5b
564d4e9e72339c5abd65cb8e1d3cdbdb31c
1121b9bb8e99ee1286e51e648a41dbc7429f
15b6afcdcef3f89d422ad411fbffda137f78cc
a84485b73cf3dd3363cbf7dfbfa2f3e1bccf5
c12eaa726170d90ff76d292948c9484b5bfb
ca89132758dc8131d776fac4bf4a52a7a796
dc7b84b5d3b8b23b700b7be497e629e9379
b7f7e84c5a05c79a544c1cbe71d9779ebbe3

b93a7242ff9b5956da33cc2daacaf2f49ceb8
392db5e1183ecf9fc71d21152951a6223d24
bc7fe2c8c4a5e1c32dfe2e1a74a0939ebb7dc
e9c3931b72d5cb870c5f6737b8668f543d6b
c539cb9fdf373db7ffbc8b03ecccb888a0137
e1209ccebf569d959592bb8ab287131499e4
95f1695b51c1b83b9b8124fcfece4e454860b
6b5322ddd3cf7155b074c2b548e4a54c5da
7187606b6d98347756c3691b084760998f61
28b698c74f4c29390d5c24393fb9743591a1
c3412c31b17ee22fb7d4508b947a8d97cc40
da399a48300c729657af446b23b5e58f68e3
ce7db17dc08c61e7fba27b813f2951f1d0c1
b7ab0b0ab24a5e77f082cfeff789525787ad7
9eabc829fb30e4ee8f1c009b1d3e7ee386bab
1a67362f69652f7a044595d3c91818d47de9
03db1b256353eeb6e10b44ea9244c1dd8ef7
158c9e98baed0416459fdfe30e9562002f80d
8b209661590bb20ba6076e195d4414c44c6
3b40a564ce5eb860cd8637d7472ff50f4f1c9
e99f9fc6fc3c3357dd6f341f7c0ad956333cc4
bac32e981b988904edbe9b563e757b2ac32
9a8a5407c187d98682f4f42a1b16fce49a523

b60692d1997fbb203cb217ae05b52937f967
780c5122d7ade20eec957d346189ea30825b
6ff351669a3e366afa8d8f366b4c7cfd50c23
9e45cf0dae89fdabd4f77c59b18b7da02425
63ee16bbccc14cea7412dbbdb9f32a0fb16e
2249419145252fdb604e3757d96441fc5a73
8ecae4fc0374e4d52a19c12df9c9e9f907202
9c4e2b746073875fb7e14be09a6f511fc506d
fcc205dbbfd8fea487ba44676761acf8c4feef
5bdfc0b686dcb4e48207582a2238824f544e
98ffa80307dd8780ca13287f36cc1a6fae623
1f99a5dc451652e38e0e84540c4adf9e9e6dc
668ca980fc0e0aafbd2ec27058014e1833a47
8e18a73ef65fa084d9589b35c929ff8de75b6
91a53d1f48f89da44c29ca10e6fbecaf17fac7
cf8d168d54e8a9c993c1cb183a61efbf9126f
31aa2e92e5a86dccda7a4677e83a69f7b183
cd60d6afcdbd2276f9814dfea1b5648f4344
5387dab1ba10ecf22bd264c92aec49b9ed0c
96bbe779ded3c3e52953af196aa562cca3cf
bc782dcaa53542fe260f24fe981e2a5f8e10df
012715572de01258d0e46ac350ff03ac4866
a03df5276b3cb31680e3cc901b4823b3aeeb

6f59bee1195ac0dbe97ce26dfd30f218af063
25b74c4c69809eb0d6eaacfcd71c94ab20fb
17d45207ed1dfb4d7e88a95db92fc39da292
f2c318580b20be5e063fa415866f2d9bf1984
1f54ea55d4e768fd46a172d2a7c0eb7d30a0
fe95b5dfbfa7aef95f0e9acdb197edcb4ce19f
6e2a9a49b4745bb2221cd8034258266fa34
b9f40ef8263f34b8c2911e61b851afa49534e
b0928df201902083cf8db1c111df4a07148a
3e3a291e9621c64509fb6c61d9f1def357a51
b791416a4ef59db6ebed32b946950aaf0f02
a971d3672fc6f75f8f9cd1c297d188f1407ce
97ae3cb65e8875c03bede5a00e9fba3487aa
051c251461a4d7fb74940c66ea3ce204bdf6
298017da8934d61448a46dd8111ae3ba6e9
1f1bf4d9cb8f5f8ce9367a4cae30c9f47de30
b83b738b1adca3c37abfa74755e598b1577
10412d03aa629afb777c0844bdca9cabc417
51fc50c2b6dcb4607c89c25797876841ea8c
5ae4e042a7382cd730887e1347f5089c700f1
fde74930c791e47a76ec8ee828f2bb591de9d
1cfad41e2c5971d7fba18444a34933f20e37e
ffef0918bbed1c3a30203bc414c2904b22e4c

3926dfe087813012cca83511941ed5ec1ba1
01de30a43384ca51b2cee432c5bb5e7ad599
683078aff01fb049e6bbe39dd864400e9faed
ba809988811717aa3c953f7d1fcfd1747741
bbd22022fbc32c2453d0a99903d1eb95cf1b
48c45ffe8efa96c139c8078e94626d3757ee8
a5bdfe326098d1f65a84f09198b32ca00bf3
ba8dde309d5a1350ca39d40ff5e8c67ea8e1
42ed519e37a8ae89500fe5795917f242c9e00
a43b2e936c49f7b3262d2caa8f31ffde5d0f3
07b34d606dfb9731c66e9306e9edf1d1dd70
e7e208ee84175de927218609b8068255aa1d
267bbc493904031118fbe08397f72f87a3702
38a126e1c5f2699639639def11884a1c8d819
ad312aa5aa803ea0a107a2c21b2e831fddc0
d9bd11d144ad96e854bca8a932ea0fbb488f
0185ea8761f4d98ba6f8fc11c70e75a3c580d
0a1bbdb56fe390bbad98da23526dad181d0
69f962bcd710ee429df148327d1867425706
2aa6503ce25d14386a27dc1eefea10d0303b
9c36c0dc67a2a5c66be34b1094ca949d3d3
d3de3e6f43b9bb1601748b0e0a496a3ff2dc
fcbc1f8a2d31756e7335b6efa0de24bad62c3

5f224a52aaf5071954435b675021e4073814
265dff2bcb4e4176caedbc5285e165ce29cb9
f2a6598605c714a94de15ce70eac960b85e8
35780b9c2e8ba237531ee738818d0a57f4d1
a1613418bb2b2c8501f54ab864875c01bf2a
1ef6b78a17efef0afc5178cb54bc15b631c44
7a40874ceac7fce59726e4f0a0f0c86ea3c165
bad26d0a0c7c671fba49661767754334a297
84dc3823850b8df69a5c32f2b4bd78383e31
675a0a8db72891a1c0b9069b645169f95a3f
0c4405507f21dcfdc1df7b0621fbb0cbcf146
5f484eb259d56e3a1aca1d55123bde81bfdd
010a10f55e242f185fcfd025f8f2f13350c7c7
ed047480f66b9e2c7bf7f11fa6547e1d14acd
14459834677fd7601c703910d1ec8d7fc7f0c
6d153cb16eb022ed3ebf7bd5ff9383c603fb
6dffa10ffbba757ee363dbd021af5245d668a
7f29313a8651b8e06abe4097e009102a66ad
b5538b0e544e9f72ebbc3f6098fd250953e92
bd19507acea79ea870221d72d981111af32a
7523daf68645a4eb5e69bd3f3afea28ac16b
6a92001fd803b0b51a1e2515c21a28eb41f3
13592cc4bb29d38b97ac372994f3402f1ef67

1013c1ec97455e3e3c279ca991bb04e94c4cc
4997679bf2689e34ed6d4c53296e5f5355b4
5d5c185908ea2493374d3edbe24637b1bbb
33bfac817da53239e3d6f9c7b1cf090edf5b1
1065fe7d986b4d16955d87d415d14524af57
45c30f149ab46a7fe062b390d687f105fd6fc
5993c12e65b187a301ec16b0d00171029fec
82ddc258d4c92c11958328dc6b44757c3000
77a17ad8973337b593334d9d35081da4019
404e86e25f0c09c88ba76b82b1c9da4b7c71
86b644e225fd787b4042670b8836359f6a9c
a096bdfb7da1e2848ce985b6db5135af4974
2656891805d293f4ba96221d1bdee5d2651
c44b6e4efd934354ec9254bb0a26e737835d
740d4ba0eb1698822f093e911a54882ccaa2
d14906d5c1c9fa70b4a99dceaf009db15c82
c31a94a874af0631ed70be3c71378ad90dfd
3f6a4407e93c8cd0fe76e00aa3423bd7e9de
d06a08248f12d8d5ba6442d96bf802cbd6e
69993b3b7d9580a86a4be3da77498dd367d
62f212252b1682ef6d49c132ae636e5aea1b
aca8fa218865d63ab5c03cb5d9c6727e113c
90a8aba26297086370b94b922cc802ca826

b2f47b16764bb5487345b9d8a06e186dd44
97c8c0f0390a10e51a03e8939ad8dd871900
8e9377a111f47bff87619a28de302c3475bd1
eafa0659257b2e3d30df9d98ff1ee0b026ead
4db865faf45f434242cbff0256575321881e4
bcd185fe2c0924404b7f24a53a8057c2a252
5fb5f92922e830102e66df966735eb30dfb7c
caea271d3a89f864891395c3a4f0c233070fe
e9d1361dc4addb4061977ab13c072b49fc2
76066996c3979e912d8c5196f732bbf8dd0c
6a823be6200b25f6e50c029e6f3f03698074c
db21f0ad52668e15af47a39dbc345b9b5e7b
1d3dfd5868f2d49499f5ef2868388744504d
388a1e420bc949531dedc42ed720b7ec14f1
7bd14f9c8e3e6d494a2d39414e87a3005c70
176e51e60b1e8033b79d527fc1ed90136f27
058681c510769271ad624e24f9d721d8af89
dd2bd93a850f1c6fa70081c788e4b027f3c1
903a4b217f0024063813de4a63a44dd5499f
e76f1375a5fa60b3f8084e4c547962514bd0e
2c08f1c1b30f4f4f9e98b0c50a162b2bb1980
068805d5b41faf8e487598a17fd099a054e6
66d48495dcd4aa2ac4624b4e1c84d4f36ff8

695458827494de1448f1b3ffbf777593a7d0
35e5d87f7ef3d0c7d8371b7d744286050b8b
61265de36a27a4ee5cb72aed0c20b5dbf679
84e8840861911c1180beb4f9ea1f8363168ef
b5cbb40893abaf3048a2d4b225216f1bcbf5
902e59ea146cb577de9296f7804d59ff57d6a
095fe3aaad2c78f5ffd219642cb9682fa7627
df5a323df5615614836bcf22589a6f4e4bbd
d786fd3ebfa864ddc0959e0e6b75e9d6e394
fc21be40c653726ea7dd2f57eca270c53a292
bec8f45a84912e0b010d56c1d761280da8b1
8b8f12442754d906f5250e1e926c434a96bd
6bd79a54159dad2a200cc6558887eeddde1
494b067ca9d380ec8c462317fce966dcf9567
e678431007203197c3485d2a141fdbcfa8fae
c463235dec02c548d50815eefca77a53fa00a
451d7c594f545c9276b91578a50153042da4
080185d7eac8d19d01de98d824c314a2782
d4a3e2bc9bf7294a061d30a60f00756e7fabf
431264aa042fd08839a1765c926571bf2209
3bd03a1d4650819411a5249ef459e2897c97
46dfe05e98ed3ef76badd6e3bdb3c7756c91
1eceee17860091fe1f0b1aaac49e655c71ce7

2549f4bb314f20aa24dc5c303a2361b50dab
b567f0612035bb1db75417a46eb1e14ec0c9
8ee576e2f4c98e6c734a4a6d2beef4893ee19
25d269d7e9fc0ff615e4e2b4bf3fd2434a7bd
3767e2e4420629322f16eda2b954930508fc
0c50962423c698d8456fd9045d560052a633
b87b6b3be13651bcce7c45772aeb5f02e717
c805e163813d503b6ed2cfadd8ef87298bb5
031f70fc1f964c9a625e6be52f77896e8279d
1add4195727a4a54ebf9b75b821cf7476d28
08279cfd65834a1e42996bed0ca09025dee1
3f996a9e6947125af0347747130750974610
db7ad9d5c6dfdc00dac68a17a43d1aa1cf52
88baa7fda8d102e7032a909ec51bb0feaa85
ea69457ae8985bb0f1b3435aaec95d15199a
f8b50e28babe143ef8528ed7030d60ee8d8f1
d5d3138a6c6cc7274eb7d0d1e1162e789c98
dd32297d746a430b686cbacaebf388c4dd6
17db624212d21ebd156167fe8a48b9b9de7
31fbcab6a29cfc069bc3413948207435133b
9eca4f4b4fc96d38c4f3caea5e8780cf3aac0f
ce9bbcc3d6217fca031f26812882d459c5cc0
2c103401d063460570ef487906a3550a65d5

60407932402340c5aae26c94d8930bfd528f
0c9edb19c6aab6a17e6e5368cd996fb2b531
3cc95c7ad18db7147072bd0b79358f66e734
6464a5eed31878d6579ecf3f8416d09d6078
ac64d9f5250fb92cd817909041db6eeab2d9
a30b5c1caf27649f101200907fbf25a73fac4
8c71b9953b5fb3da5ae9b2256b6d7974dee
479bfb609ff0b4c6f81e9956b6f9714dea0ec
409d4cde45e50357137b863f4a4f404f615fa
ea621b14c121cb4cf6100276aa8a5064ed72
363135cab9f23a9be09bc01e9629874e96df
4596787d6a10fd7b99e1f329e211163a3919
b9c707a9c3e47578437eaa20b47c699868c4
d824c45131880861505408a7bda3a07c4cc
ba2932ea82f5acb383f72524540c8c0883b4
1d82390cbd8afc9f5c79b7c787a24557db27
470745322650fb2eb60ba1cb83d38d5f309e
80d58ee4b32910ef7613e4bdf1c8811897e99
dac8c6ef4e451a7e78914572be3d9ea4f9913
6d4728edc250824d2e168db21f2b8e2f7c13
dd7d6f6ee4b1472eec35d9911f759fa830bdf
3f46ea1973c6832c8ffa56ce6fc79f326df3a6
54a56d6d8f9f3cb7236da79beed9f39a5457

9d979e694b489135313b273caaa3f7440d48
370754ad2f93f5667cfcdcaca9d5f307566f6
cca9f9532764553df83e108b404b2c107667
ef2a2dcb4e1d979e919e36779cd93c362b6f
6afebc79f9f9055905b34a6ad90fdcee33f2ee
1884ea8f0291d3a20b04d808002a29661717
1bc1a011a040b87a266244cd51b91d2628c
5bdec0711687bb41fe28c613489168d5199e
fb61ae0c14263b9dc250b2a0d297ee878e6a
ed2d2eaeacad5ababaa6bab565796e6d43b
78fefc3f4a97555757376edbb673cbce86dad
a8da51b1d76a002f04dba0ce1b0edab2c99
9f9b303625cd9c929d37b5fae953185366bd
80b104bc7376e3b2ca65ab6b1b1a1a1bb63
5feeafe5fddbf635b63e3af1a37d236abef07
02dd35209c515e0d62987a59ad25c171e1f2
9a9372bdd158739800c12d4f3aace8a326aa
9760df598f2cbb4ed2f499df958898d8e507
21d660503681ce4adadf1e4ca3d5f7f46895f
a5d6033ba686e636d56dbe9131dad3c4dba
3aec0e657d9f672127b342203940f6513690
249fe8fe98b5b5ec7bf0ee55ab562d59bbf63
747ac2c98c5f50097822811393bb69ea58bd

4107fb40db87a1e039f76d8e8e6107849f48
24454e7d2f620b5c93507d59299a4768fe33
ad509a03d544f930f1f54df43772aea4aadd
7297b49e0d444a097e7d537d3f0359b22d3
83274347bd19892ae149e85ee50589d033e4
eadb964aabd7fc5c6d12ffb0ffcdf013f8ff29f
fb1eb3f76c1f67f76c7eee6396c6c700000000
049454e44ae426082
Home > Tutorials > XUL Tutorial > Introduction

Contents
Top of Form 1

Search:
Bottom of Form 1

Single Document Version
Download the XUL Tutorial
Element Reference
Quick Reference
Key Code Reference
Template Syntax Examples

1. Introduction
1. Introduction
2. XUL Structure

3. The Chrome URL
4. Contents.rdf Files

2. Simple Elements
1. Creating a Window
2. Adding Buttons
3. Adding Labels and Images
4. Input Controls
5. List Controls
6. Progress Meters
7. Adding HTML Elements
8. Using Spacers
9. More Button Features

3. The Box Model
1. The Box Model
2. Element Positioning
3. Box Model Details
4. Groupboxes
5. Adding More Elements

4. More Layout Elements
1. Stacks and Decks
2. Stack Positioning
3. Tabboxes
4. Grids
5. Content Panels
6. Splitters
7. Scroll Bars

5. Toolbars and Menus

1. Toolbars
2. Simple Menu Bars
3. More Menu Features
4. Popup Menus
5. Scrolling Menus

6. Events and Scripts
1. Adding Event Handlers
2. More Event Handlers
3. Keyboard Shortcuts
4. Focus and Selection
5. Commands
6. Updating Commands
7. Broadcasters and Observers

7. Document Object Model
1. Document Object Model
2. Modifying a XUL Interface
3. Manipulating Lists
4. Box Objects
5. XPCOM Interfaces
6. XPCOM Examples

8. Trees
1. Trees
2. More Tree Features
3. Tree Selection
4. Custom Tree Views
5. Tree View Details
6. Tree Box Objects

9. RDF and Templates
1. Introduction to RDF
2. Templates
3. Trees and Templates
4. RDF Datasources
5. Advanced Rules
6. Persistent Data

10. Skins and Locales
1. Adding Style Sheets
2. Styling a Tree
3. Modifying the Default Skin
4. Creating a Skin
5. Localization
6. Property Files

11. Bindings
1. Introduction to XBL
2. Anonymous Content
3. XBL Attribute Inheritance
4. Adding Properties
5. Adding Methods
6. Adding Event Handlers
7. XBL Inheritance
8. XBL Example

12. Specialized Window Types
1. Features of a Window
2. Creating Dialogs
3. Open and Save Dialogs

4. Creating a Wizard
5. More Wizards
6. Overlays
7. Cross Package Overlays

13. Installation
1. Creating an Installer
2. Install Scripts
3. Additional Install Features

Tutorials
Main Tutorial
Developer Guide
XUL Questions

References
XUL Reference
Object Reference
XPCOM Reference

XUL Forum
Downloads
About XULPlanet
Next

Introduction
This tutorial guides you to learning XUL (XML User-interface Language) which is a
cross-platform language for describing user interfaces of applications.
This tutorial will demonstrate creating a simple find file user interface, much like that
provided by the Macintosh's Sherlock or the find file dialog in Windows. Note that only
the user interface will be created and some limited functionality. The actual finding of
files will be not be implemented. A blue line will appear to the left of a paragraph where

the find file dialog is being modified. You can follow along at these sections.

What is XUL and why was it created?
XUL (pronounced zool and it rhymes with cool) was created to make development of the
Mozilla browser easier and faster. It is an XML language so all features available to
XML are also available to XUL.
Most applications need to be developed using features of a specific platform making
building cross-platform software time-consuming and costly. A number of cross-platform
solutions have been developed in the past. Java, for example, has portability as a main
selling point. XUL is one such language designed specifically for building portable user
interfaces. It takes a long time to build an application even for only one platform. The
time required to compile and debug can be lengthy. With XUL, an interface can be
implemented and modified quickly and easily.
XUL has all the advantages of other XML languages. For example XHTML or other
XML languages such as MathML or SVG can be inserted within it. Also, text displayed
with XUL is easily localizable, which means that it can be translated into other languages
with little effort.

What kinds of user-interfaces can be made with XUL?
XUL provides the ability to create most elements found in modern graphical interfaces.
Some elements that can be created are:
Input controls such as textboxes and checkboxes
Toolbars with buttons or other content
Menus on a menu bar or pop up menus
Tabbed dialogs
Trees for hierarchical or tabular information
Keyboard shortcuts
The displayed content can be created from the contents of a XUL file or with data from a
datasource. In Mozilla, such datasources include a user's mailbox, their bookmarks and
search results. The contents of menus, trees and other elements can be populated with this
data, or with your own data supplied in an RDF file.
There are several ways that XUL applications are created:
Firefox extension - an extension adds functionality to the browser itself, often in the
form of extra toolbars, context menus, or UI to customize the browser UI. This is
done using a feature of XUL called an overlay, which allows the UI provided
from one source, in this case, the Firefox browser, to be merged together with the
UI from the extension. Extensions may also be applied to other Mozilla based

products such as Thunderbird.
Standalone XULRunner application - XULRunner is a packaged version of the
Mozilla platform which allows you to create standalone XUL applications. A
browser isn't required to run these applications, as they have their own executable
file.
XUL package - in between the other two are applications which are created in the
same way as an extension, but they act like a separate application in a separate
window. This is used when you don't want to have the larger size of a complete
XULRunner application, but don't mind requiring a Mozilla browser to be
installed to be able to run the application.
Remote XUL application - you can also just place XUL code on a web server and
open it in a browser, as you would any other web page. This method is limited
however, as there will be security concerns that will limit the kinds of things you
will be able to do, such as opening other windows.
The first three types all require an installation to be performed on the user's machine.
However, these types of applications do not have security restrictions placed on them, so
they may access local files and read and write preferences, for example. For extensions,
the XUL files and associated scripts and images used by an application would be
packaged into a single file and downloaded and installed by the user. Mozilla applications
such as Firefox provide an extension manager which allows packages to be installed
without having to write a lot of complex code.
It is also possible to open XUL files directly from the file system or from a remote web
site, however they will be restricted in the kinds of operations they can do, and some
aspects of XUL will not work. However, if you do want to load XUL content from a
remote site, the Web server must be set up to send XUL files with the content type
'application/vnd.mozilla.xul+xml'. XUL is usually stored in files with a .xul extension.
You can open a XUL file with Mozilla as you would any other file, using the Open File
command from the File menu or typing the URL into the address bar.

What do I need to know to use this tutorial?
You should have an understanding of HTML and at least a basic understanding of XML
and CSS. Here are some guidelines to keep in mind:
XUL elements and attributes should all be entered in lowercase as XML is casesensitive (unlike HTML).
Attribute values in XUL must be placed inside quotes, even if they are numbers.
XUL files are usually split into four files, one each for the layout and elements, for
style declarations, for entity declarations (used for localization) and for scripts. In
addition, you may have extra files for images or for platform specific data.
XUL is supported in Mozilla and browsers that are also based upon on the Gecko engine,

such as Netscape 6 or later and Mozilla Firefox. Due to various changes in XUL syntax
over time, you will want to get the latest version for the examples to work properly. Most
examples should work in Mozilla 1.0 or later. XUL is fairly similar in Firefox and in
other Mozilla-based browsers, although there are some specific differences such as
support for customizable toolbars.
This tutorial attempts to cover much of XUL's functionality, however, not all features are
discussed. Once you are familiar with XUL, you can use the XUL Element Reference to
find out about other features supported by specific elements.

(Next) First, let's look at how XUL files are organized.
Next
89504e470d0a1a0a0000000d494844520000000d0000000d01030000004825763f000000
06504c5445666666ffffff734b59a80000001b4944415478da63606060a8ffc05001430e025
0041701ca32300000ed4f0c3f3cbc7cd10000000049454e44ae426082Add a note User
Contributed Notes
No comments available
89504e470d0a1a0a0000000d494844520000000d0000000d01030000004825763f000000
06504c5445666666ffffff734b59a80000001b4944415478da63606060a8ffc05001430e025
0041701ca32300000ed4f0c3f3cbc7cd10000000049454e44ae426082Add a note
About XULPlanet Contact Us mozilla.org mozdev.org MozillaZine.org Hosted by:
WebAIM.org
Copyright © 1999-2006 XULPlanet.com skip to content

89504e470d0a1a0a0000000d49484452000
000d7000000410803000000759cc1d90000
0300504c5445000000000008000800000808
001000001800062b0408000008000808080
0080808081000081800081c0810000810101
0102b08103121121e0a141804181818181c1
c182108182c06182d18211c1c21212121291
8232b09242927252d182646132936142957
bd295bca2a5ab22d5ea32e3e2a2f4da43131
2d313939315ab1315eb93163ca3167c9335
4903365b7356dca3668ad376cc23956b539
56c53963ca3a6cd63b44203b58ad3c609f3c
65ba3d3f3b425ab94261ce42638c4263a042
63ad426ba54456294468284573b94765aa4
768b54855374a4a4a4a5c944a63bd4c5644
4c59654d6e254d74a74e564e4e6c35506ec8
5075bd5263bd527bcf5464915468b55768a
757762f5b6b295d5f555d66445d77415d87
446181cc657259657ea8657eba696c6f6b8e
486c87ca6c8e616c8eba6f77836f92d47099c
6709f5f7779737c9cdf7d9ace7fa66a818a7d
81935481956b838cac8a8f828c948c8ca682
90a5e294a0ad95b1e597b5d498a8d098ac6

798adf399bbf49cb28aa5b2aaa5b5b5a5b5
daa5b5efa5b5f7a5bdfda5cef7a7c88ea9b8
deaabdecaac8ecadada5adadadadb77eadb
df9adca73adcef7add6b5b1b59cb1c6ffb1c
aebb3c7a2b5adb5b5b5b5b5c6adb5ceffb5
d6f7b5deffb8c28fb9d2ffbab7b7bdbdb5bd
bdbdbdc6c6bdc6ffbdcef7bdd6f7bdd6ffbd
deffbde7ffbfcadec0d3e8c1c6b9c1ce8fc5d4
9dc6c6c6c6cec6c6ceffc6d6ffc6def7c6deffc
6e7ffcadbaecbd3f7cec6d6ceced2ced6efced
6ffcedeffcee7ffceefffd2deefd4e0a8d6d6ced
6d6d6d6def7d6e2fbd6e7ffd6efffd6f7ffd6ff
ffdaefb3dededededeffdee7ffdeefc6deeff7d
eefffdef7ffdeffffe2f3c6e7e7e7e7e7ffe7efefe
7eff7e7f7efe7f7f7e7f7ffe7ffffe9f3afe9fcc0e
beffbebfbefecf4e4efe7efefefefefefffeff7e7ef
f7f7eff7ffeffbceefffe7efffefeffff7effffff1fcc
0f5fdb3f7efeff7eff7f7effff7f7eff7f7f7f7f7fff
7fbdaf7ffc6f7ffcef7ffeff7fff7f7fffffbf3e7fbf
fe7ffeffffff7effff7f7fff7ffffffeffffff7ffffff000
000000000e319894f00001ab14944415478d
aed5b7b5c14d7d93e7b11d811dc55881744
c50405b122186ebb8a1005d144440ca2881

714898a881754c4265ff5d7a4899ae4cbcda
4ad9636c5e6666a2ead4d4cf3d9aa8d31016
33e935d43127437ca24e0ceb8ec1c767766cf
64bff7ccec6234a609c91ff9f2fb750067762e
67cf7b9ef77dcef3be6744f28fbb49bdffc818
7ee846a4abc7df7b433fae59e45ad37a8fb0f
22bfd64ed52baaff45feab542fa4106fdbfb0
0b0b186339689524ca047fd5c01f62df8f6b
97d06b18d84088480472ad613f55bc08165
48e10087112bfdbef249c6a1627fc20f37ee4f
8e264b0c32908825b78a46e68e68ccd3e37c
025f14028c409577fa27649a22412226caa1
b3a66d4e6cd2bd7ad5c747bbcaf8b5e700a
b2f0d3f5434912459f734cfcd2cd9bd7ac5cb
7f99efb5ee85e64211247c02f9d82f307cc617
af4e36e1a2d4a8e9f8ac42b11fd08e94918fe
b9fe53a23705ce4ef086a1813fa4e11f5b6d1
0f7c8e8752b8ba7ad59b766c5ba87defafca
db87a220ae4b95d2f5af04f36be588c3f7e32
6e65c582d98b674f5bb078f6e2f50fbdb729
ae93940f1f3e668ce5831f20a6d00d84daf57
240be4608e09000228a0a0adef495cfd257f5
51ef3dea65f2d533f0206685a1a61915c5c5d

346858d9a3d7bf68af56fbeb7a8dc4d5ed49
72f7d72c4980e419ddd48dfed92825f47e95
5ed0b266adfa9460bcdff5808890275ba812
9946e411d278050800f8484ee8123ba1395d
9561d0cb82c119904cd533c8c87b9eb9245a
b5d34638c5eabd7175714574c5bbfeedce37
16eb7bb7fc5b4cda306aefcef81d841db833
ba53ee3a57e9974758449688415bbae354c5
60502f4176c09a125f48ea96a1051ef26bd4a
fd3ac03a61e60a06cf05a41d31b450481c3a
6664fcc891912bd66f7f6fc6904b9b8654ac5
8316ae0ba9549365e96453a623cdf67bb60d
62782a07446a4c31e1a57da73aa6e88a8742
96820c641a90d7be91a37a540f969cf053f75
20da1b055e1c7280ab5edd4ef1e22418b4d8
58556f3889db5f37fcf60d1b5e7d5caf8dd62
e5cb1226ccd9a755149740c9d4aab7d99a7
29cffb0c018d5713f0210f13d007024803bfe
84b1dec0c2880904ed6e99097a194acf3460
450f7008548bd06a45c53595507bfc1637ac
5074d7823bc4c4083bcf0d96b081e8458d83
502b94c462423d46dd7a130f8804cae30f4f
07dc909afe8e7475fbe32322085cdf223d750

ce15a5954dd0a86842c63ef2bc32a214064c
c855c2507fd4380ac95380d5edf6abea3418
7d210756a003b888029b107a98b6acb6218
7a43b858a0e3ec72931e814e0a64d7596dbe
bfc6e22c468973ebfc130a41818b278dded6
3ea4422f6f89d1c34c6933ed0879e8ea14136
003430dc30ac1e461d718357f901e4029a80
4743c71beed41828a800e397141b830aa68a
9316b005f83548f9680804b151b00a04b481
109a145914e9359802c818d05e79e1d303e9
2e0b349faebd65cbc7cf318b1efb68a0a5b9
07195dfd7dba2372838e68c23403bdf0a091
e8fa8897a49283a484d6756caf7c10548e082
1037789417ce4de53c4e3f7cb34602449055
905893e034c285d3f9310d9492e0c8ecf0c8b
ecd76f9469da5210519bef797551e652fd908
a3d1586850b3347ad596981c896ecb27041
c07da30d59afe003c30ee1a195b51053ea88
c20022141a621534cdd5580a205d401b1a1
97a3b9c0a907edefe2a1ab216113d7dca8b0
c3a1990d429b8062068832d06ba8d0193b7
227e181a86227c282aa25f8f183e302f7af31f
f7214e3e577c0c1e62fd612f209dc710bdf39

3ee7195f18cd720f701304a7b902d001dc18f
004e2f4b5d303df97c3e511669c620711886a
a4b967c128c30911d12e66894096e3be6e11
2e6384c387a0e36d10e7180254ef2fb643bef
003dc113d1ef14ecd861279f78420102d916
70dcf0cce2e2c58b17af51b615f49fedeb5e7
875fd90cc15dbb76756dc86065d84ef79724
6c5e6babaff8ab2082afedf9de789cc012bd8
59ba39a023188ce0a8abf160168fb1c38179
07b801f89abb5d803b1c9875586d2c76c04
5b89d80f0c6329c840b4a2b30959ee79c709
9b5d958fa34666dd034efef21415942adf28f
4c5c54316d01888cd90b162f580c426af6e2c
52bd7afdff0db175c5f7cbe7e211a1ce759b9
7451c5ca958b6784e9f5dab831e0e7dfdd2e
85a7d8679f3d7ee2f4e9d3b6d3365b8b956d
7997f617b7fde37d2b6bb5d96cad36077efb
94e30c98f1cfc6c69d3b1f6dded7dcfce8ce8
6c6adcf38304c7c6ea0abbffdeded362b1802
cd1c3ff4e71d3c766cadfd79c3dd4f351ffaf3
d3879edab97667e3568c437203628bdc3ed
8b2140446265806b015178785551467f62fa
ea8d850b7e1cd2fce2d5c1877dba8ccdb00d

0a5ebee7bf5a3b73edf33d8df17bca85d8e9
6ad39397979d94b2a9754ad2e9a997347e9
efe9a8379696969556af5eb6ba3267e6cc998
d028cb9ed99d299f95993cde63b0bb2b2e7
97953ed1860537713bf1bb1be1e6b2caeaea
a2654539334b4b01a33b66964dc8ce9a357
75641517e7e765959e9291cd232e05173a20
b67240ed66a33c192db46ddbe346ef3a262c
bf09171a678d318edfa735f9cdbb3674fc53
4406bcdba756bd6ac5ffffcb90d83e53ed90
528b46ccc299b9a9f9a92323d2535b7686ae
95dcf8007b13b4acb72b227e4a526644fcdc
bc9f98595bad8a91d3b6ae78d4b4f4f1f5db
0644b63e3df0824137ea75b6e7b62e3b2656
5b3b2cce6d409f9951b3762bbf08b6d8d5b
564d4e9e72339c5abd65cb8e1d3cdbdb31c
1121b9bb8e99ee1286e51e648a41dbc7429f
15b6afcdcef3f89d422ad411fbffda137f78cc
a84485b73cf3dd3363cbf7dfbfa2f3e1bccf5
c12eaa726170d90ff76d292948c9484b5bfb
ca89132758dc8131d776fac4bf4a52a7a796
dc7b84b5d3b8b23b700b7be497e629e9379
b7f7e84c5a05c79a544c1cbe71d9779ebbe3

b93a7242ff9b5956da33cc2daacaf2f49ceb8
392db5e1183ecf9fc71d21152951a6223d24
bc7fe2c8c4a5e1c32dfe2e1a74a0939ebb7dc
e9c3931b72d5cb870c5f6737b8668f543d6b
c539cb9fdf373db7ffbc8b03ecccb888a0137
e1209ccebf569d959592bb8ab287131499e4
95f1695b51c1b83b9b8124fcfece4e454860b
6b5322ddd3cf7155b074c2b548e4a54c5da
7187606b6d98347756c3691b084760998f61
28b698c74f4c29390d5c24393fb9743591a1
c3412c31b17ee22fb7d4508b947a8d97cc40
da399a48300c729657af446b23b5e58f68e3
ce7db17dc08c61e7fba27b813f2951f1d0c1
b7ab0b0ab24a5e77f082cfeff789525787ad7
9eabc829fb30e4ee8f1c009b1d3e7ee386bab
1a67362f69652f7a044595d3c91818d47de9
03db1b256353eeb6e10b44ea9244c1dd8ef7
158c9e98baed0416459fdfe30e9562002f80d
8b209661590bb20ba6076e195d4414c44c6
3b40a564ce5eb860cd8637d7472ff50f4f1c9
e99f9fc6fc3c3357dd6f341f7c0ad956333cc4
bac32e981b988904edbe9b563e757b2ac32
9a8a5407c187d98682f4f42a1b16fce49a523

b60692d1997fbb203cb217ae05b52937f967
780c5122d7ade20eec957d346189ea30825b
6ff351669a3e366afa8d8f366b4c7cfd50c23
9e45cf0dae89fdabd4f77c59b18b7da02425
63ee16bbccc14cea7412dbbdb9f32a0fb16e
2249419145252fdb604e3757d96441fc5a73
8ecae4fc0374e4d52a19c12df9c9e9f907202
9c4e2b746073875fb7e14be09a6f511fc506d
fcc205dbbfd8fea487ba44676761acf8c4feef
5bdfc0b686dcb4e48207582a2238824f544e
98ffa80307dd8780ca13287f36cc1a6fae623
1f99a5dc451652e38e0e84540c4adf9e9e6dc
668ca980fc0e0aafbd2ec27058014e1833a47
8e18a73ef65fa084d9589b35c929ff8de75b6
91a53d1f48f89da44c29ca10e6fbecaf17fac7
cf8d168d54e8a9c993c1cb183a61efbf9126f
31aa2e92e5a86dccda7a4677e83a69f7b183
cd60d6afcdbd2276f9814dfea1b5648f4344
5387dab1ba10ecf22bd264c92aec49b9ed0c
96bbe779ded3c3e52953af196aa562cca3cf
bc782dcaa53542fe260f24fe981e2a5f8e10df
012715572de01258d0e46ac350ff03ac4866
a03df5276b3cb31680e3cc901b4823b3aeeb

6f59bee1195ac0dbe97ce26dfd30f218af063
25b74c4c69809eb0d6eaacfcd71c94ab20fb
17d45207ed1dfb4d7e88a95db92fc39da292
f2c318580b20be5e063fa415866f2d9bf1984
1f54ea55d4e768fd46a172d2a7c0eb7d30a0
fe95b5dfbfa7aef95f0e9acdb197edcb4ce19f
6e2a9a49b4745bb2221cd8034258266fa34
b9f40ef8263f34b8c2911e61b851afa49534e
b0928df201902083cf8db1c111df4a07148a
3e3a291e9621c64509fb6c61d9f1def357a51
b791416a4ef59db6ebed32b946950aaf0f02
a971d3672fc6f75f8f9cd1c297d188f1407ce
97ae3cb65e8875c03bede5a00e9fba3487aa
051c251461a4d7fb74940c66ea3ce204bdf6
298017da8934d61448a46dd8111ae3ba6e9
1f1bf4d9cb8f5f8ce9367a4cae30c9f47de30
b83b738b1adca3c37abfa74755e598b1577
10412d03aa629afb777c0844bdca9cabc417
51fc50c2b6dcb4607c89c25797876841ea8c
5ae4e042a7382cd730887e1347f5089c700f1
fde74930c791e47a76ec8ee828f2bb591de9d
1cfad41e2c5971d7fba18444a34933f20e37e
ffef0918bbed1c3a30203bc414c2904b22e4c

3926dfe087813012cca83511941ed5ec1ba1
01de30a43384ca51b2cee432c5bb5e7ad599
683078aff01fb049e6bbe39dd864400e9faed
ba809988811717aa3c953f7d1fcfd1747741
bbd22022fbc32c2453d0a99903d1eb95cf1b
48c45ffe8efa96c139c8078e94626d3757ee8
a5bdfe326098d1f65a84f09198b32ca00bf3
ba8dde309d5a1350ca39d40ff5e8c67ea8e1
42ed519e37a8ae89500fe5795917f242c9e00
a43b2e936c49f7b3262d2caa8f31ffde5d0f3
07b34d606dfb9731c66e9306e9edf1d1dd70
e7e208ee84175de927218609b8068255aa1d
267bbc493904031118fbe08397f72f87a3702
38a126e1c5f2699639639def11884a1c8d819
ad312aa5aa803ea0a107a2c21b2e831fddc0
d9bd11d144ad96e854bca8a932ea0fbb488f
0185ea8761f4d98ba6f8fc11c70e75a3c580d
0a1bbdb56fe390bbad98da23526dad181d0
69f962bcd710ee429df148327d1867425706
2aa6503ce25d14386a27dc1eefea10d0303b
9c36c0dc67a2a5c66be34b1094ca949d3d3
d3de3e6f43b9bb1601748b0e0a496a3ff2dc
fcbc1f8a2d31756e7335b6efa0de24bad62c3

5f224a52aaf5071954435b675021e4073814
265dff2bcb4e4176caedbc5285e165ce29cb9
f2a6598605c714a94de15ce70eac960b85e8
35780b9c2e8ba237531ee738818d0a57f4d1
a1613418bb2b2c8501f54ab864875c01bf2a
1ef6b78a17efef0afc5178cb54bc15b631c44
7a40874ceac7fce59726e4f0a0f0c86ea3c165
bad26d0a0c7c671fba49661767754334a297
84dc3823850b8df69a5c32f2b4bd78383e31
675a0a8db72891a1c0b9069b645169f95a3f
0c4405507f21dcfdc1df7b0621fbb0cbcf146
5f484eb259d56e3a1aca1d55123bde81bfdd
010a10f55e242f185fcfd025f8f2f13350c7c7
ed047480f66b9e2c7bf7f11fa6547e1d14acd
14459834677fd7601c703910d1ec8d7fc7f0c
6d153cb16eb022ed3ebf7bd5ff9383c603fb
6dffa10ffbba757ee363dbd021af5245d668a
7f29313a8651b8e06abe4097e009102a66ad
b5538b0e544e9f72ebbc3f6098fd250953e92
bd19507acea79ea870221d72d981111af32a
7523daf68645a4eb5e69bd3f3afea28ac16b
6a92001fd803b0b51a1e2515c21a28eb41f3
13592cc4bb29d38b97ac372994f3402f1ef67

1013c1ec97455e3e3c279ca991bb04e94c4cc
4997679bf2689e34ed6d4c53296e5f5355b4
5d5c185908ea2493374d3edbe24637b1bbb
33bfac817da53239e3d6f9c7b1cf090edf5b1
1065fe7d986b4d16955d87d415d14524af57
45c30f149ab46a7fe062b390d687f105fd6fc
5993c12e65b187a301ec16b0d00171029fec
82ddc258d4c92c11958328dc6b44757c3000
77a17ad8973337b593334d9d35081da4019
404e86e25f0c09c88ba76b82b1c9da4b7c71
86b644e225fd787b4042670b8836359f6a9c
a096bdfb7da1e2848ce985b6db5135af4974
2656891805d293f4ba96221d1bdee5d2651
c44b6e4efd934354ec9254bb0a26e737835d
740d4ba0eb1698822f093e911a54882ccaa2
d14906d5c1c9fa70b4a99dceaf009db15c82
c31a94a874af0631ed70be3c71378ad90dfd
3f6a4407e93c8cd0fe76e00aa3423bd7e9de
d06a08248f12d8d5ba6442d96bf802cbd6e
69993b3b7d9580a86a4be3da77498dd367d
62f212252b1682ef6d49c132ae636e5aea1b
aca8fa218865d63ab5c03cb5d9c6727e113c
90a8aba26297086370b94b922cc802ca826

b2f47b16764bb5487345b9d8a06e186dd44
97c8c0f0390a10e51a03e8939ad8dd871900
8e9377a111f47bff87619a28de302c3475bd1
eafa0659257b2e3d30df9d98ff1ee0b026ead
4db865faf45f434242cbff0256575321881e4
bcd185fe2c0924404b7f24a53a8057c2a252
5fb5f92922e830102e66df966735eb30dfb7c
caea271d3a89f864891395c3a4f0c233070fe
e9d1361dc4addb4061977ab13c072b49fc2
76066996c3979e912d8c5196f732bbf8dd0c
6a823be6200b25f6e50c029e6f3f03698074c
db21f0ad52668e15af47a39dbc345b9b5e7b
1d3dfd5868f2d49499f5ef2868388744504d
388a1e420bc949531dedc42ed720b7ec14f1
7bd14f9c8e3e6d494a2d39414e87a3005c70
176e51e60b1e8033b79d527fc1ed90136f27
058681c510769271ad624e24f9d721d8af89
dd2bd93a850f1c6fa70081c788e4b027f3c1
903a4b217f0024063813de4a63a44dd5499f
e76f1375a5fa60b3f8084e4c547962514bd0e
2c08f1c1b30f4f4f9e98b0c50a162b2bb1980
068805d5b41faf8e487598a17fd099a054e6
66d48495dcd4aa2ac4624b4e1c84d4f36ff8

695458827494de1448f1b3ffbf777593a7d0
35e5d87f7ef3d0c7d8371b7d744286050b8b
61265de36a27a4ee5cb72aed0c20b5dbf679
84e8840861911c1180beb4f9ea1f8363168ef
b5cbb40893abaf3048a2d4b225216f1bcbf5
902e59ea146cb577de9296f7804d59ff57d6a
095fe3aaad2c78f5ffd219642cb9682fa7627
df5a323df5615614836bcf22589a6f4e4bbd
d786fd3ebfa864ddc0959e0e6b75e9d6e394
fc21be40c653726ea7dd2f57eca270c53a292
bec8f45a84912e0b010d56c1d761280da8b1
8b8f12442754d906f5250e1e926c434a96bd
6bd79a54159dad2a200cc6558887eeddde1
494b067ca9d380ec8c462317fce966dcf9567
e678431007203197c3485d2a141fdbcfa8fae
c463235dec02c548d50815eefca77a53fa00a
451d7c594f545c9276b91578a50153042da4
080185d7eac8d19d01de98d824c314a2782
d4a3e2bc9bf7294a061d30a60f00756e7fabf
431264aa042fd08839a1765c926571bf2209
3bd03a1d4650819411a5249ef459e2897c97
46dfe05e98ed3ef76badd6e3bdb3c7756c91
1eceee17860091fe1f0b1aaac49e655c71ce7

2549f4bb314f20aa24dc5c303a2361b50dab
b567f0612035bb1db75417a46eb1e14ec0c9
8ee576e2f4c98e6c734a4a6d2beef4893ee19
25d269d7e9fc0ff615e4e2b4bf3fd2434a7bd
3767e2e4420629322f16eda2b954930508fc
0c50962423c698d8456fd9045d560052a633
b87b6b3be13651bcce7c45772aeb5f02e717
c805e163813d503b6ed2cfadd8ef87298bb5
031f70fc1f964c9a625e6be52f77896e8279d
1add4195727a4a54ebf9b75b821cf7476d28
08279cfd65834a1e42996bed0ca09025dee1
3f996a9e6947125af0347747130750974610
db7ad9d5c6dfdc00dac68a17a43d1aa1cf52
88baa7fda8d102e7032a909ec51bb0feaa85
ea69457ae8985bb0f1b3435aaec95d15199a
f8b50e28babe143ef8528ed7030d60ee8d8f1
d5d3138a6c6cc7274eb7d0d1e1162e789c98
dd32297d746a430b686cbacaebf388c4dd6
17db624212d21ebd156167fe8a48b9b9de7
31fbcab6a29cfc069bc3413948207435133b
9eca4f4b4fc96d38c4f3caea5e8780cf3aac0f
ce9bbcc3d6217fca031f26812882d459c5cc0
2c103401d063460570ef487906a3550a65d5

60407932402340c5aae26c94d8930bfd528f
0c9edb19c6aab6a17e6e5368cd996fb2b531
3cc95c7ad18db7147072bd0b79358f66e734
6464a5eed31878d6579ecf3f8416d09d6078
ac64d9f5250fb92cd817909041db6eeab2d9
a30b5c1caf27649f101200907fbf25a73fac4
8c71b9953b5fb3da5ae9b2256b6d7974dee
479bfb609ff0b4c6f81e9956b6f9714dea0ec
409d4cde45e50357137b863f4a4f404f615fa
ea621b14c121cb4cf6100276aa8a5064ed72
363135cab9f23a9be09bc01e9629874e96df
4596787d6a10fd7b99e1f329e211163a3919
b9c707a9c3e47578437eaa20b47c699868c4
d824c45131880861505408a7bda3a07c4cc
ba2932ea82f5acb383f72524540c8c0883b4
1d82390cbd8afc9f5c79b7c787a24557db27
470745322650fb2eb60ba1cb83d38d5f309e
80d58ee4b32910ef7613e4bdf1c8811897e99
dac8c6ef4e451a7e78914572be3d9ea4f9913
6d4728edc250824d2e168db21f2b8e2f7c13
dd7d6f6ee4b1472eec35d9911f759fa830bdf
3f46ea1973c6832c8ffa56ce6fc79f326df3a6
54a56d6d8f9f3cb7236da79beed9f39a5457

9d979e694b489135313b273caaa3f7440d48
370754ad2f93f5667cfcdcaca9d5f307566f6
cca9f9532764553df83e108b404b2c107667
ef2a2dcb4e1d979e919e36779cd93c362b6f
6afebc79f9f9055905b34a6ad90fdcee33f2ee
1884ea8f0291d3a20b04d808002a29661717
1bc1a011a040b87a266244cd51b91d2628c
5bdec0711687bb41fe28c613489168d5199e
fb61ae0c14263b9dc250b2a0d297ee878e6a
ed2d2eaeacad5ababaa6bab565796e6d43b
78fefc3f4a97555757376edbb673cbce86dad
a8da51b1d76a002f04dba0ce1b0edab2c99
9f9b303625cd9c929d37b5fae953185366bd
80b104bc7376e3b2ca65ab6b1b1a1a1bb63
5feeafe5fddbf635b63e3af1a37d236abef07
02dd35209c515e0d62987a59ad25c171e1f2
9a9372bdd158739800c12d4f3aace8a326aa
9760df598f2cbb4ed2f499df958898d8e507
21d660503681ce4adadf1e4ca3d5f7f46895f
a5d6033ba686e636d56dbe9131dad3c4dba
3aec0e657d9f672127b342203940f6513690
249fe8fe98b5b5ec7bf0ee55ab562d59bbf63
747ac2c98c5f50097822811393bb69ea58bd

4107fb40db87a1e039f76d8e8e6107849f48
24454e7d2f620b5c93507d59299a4768fe33
ad509a03d544f930f1f54df43772aea4aadd
7297b49e0d444a097e7d537d3f0359b22d3
83274347bd19892ae149e85ee50589d033e4
eadb964aabd7fc5c6d12ffb0ffcdf013f8ff29f
fb1eb3f76c1f67f76c7eee6396c6c700000000
049454e44ae426082
Home > Tutorials > XUL Tutorial > XUL Structure

Contents
Top of Form 1

Search:
Bottom of Form 1

Single Document Version
Download the XUL Tutorial
Element Reference
Quick Reference
Key Code Reference
Template Syntax Examples

1. Introduction
1. Introduction
2. XUL Structure

3. The Chrome URL
4. Contents.rdf Files

2. Simple Elements
1. Creating a Window
2. Adding Buttons
3. Adding Labels and Images
4. Input Controls
5. List Controls
6. Progress Meters
7. Adding HTML Elements
8. Using Spacers
9. More Button Features

3. The Box Model
1. The Box Model
2. Element Positioning
3. Box Model Details
4. Groupboxes
5. Adding More Elements

4. More Layout Elements
1. Stacks and Decks
2. Stack Positioning
3. Tabboxes
4. Grids
5. Content Panels
6. Splitters
7. Scroll Bars

5. Toolbars and Menus

1. Toolbars
2. Simple Menu Bars
3. More Menu Features
4. Popup Menus
5. Scrolling Menus

6. Events and Scripts
1. Adding Event Handlers
2. More Event Handlers
3. Keyboard Shortcuts
4. Focus and Selection
5. Commands
6. Updating Commands
7. Broadcasters and Observers

7. Document Object Model
1. Document Object Model
2. Modifying a XUL Interface
3. Manipulating Lists
4. Box Objects
5. XPCOM Interfaces
6. XPCOM Examples

8. Trees
1. Trees
2. More Tree Features
3. Tree Selection
4. Custom Tree Views
5. Tree View Details
6. Tree Box Objects

9. RDF and Templates
1. Introduction to RDF
2. Templates
3. Trees and Templates
4. RDF Datasources
5. Advanced Rules
6. Persistent Data

10. Skins and Locales
1. Adding Style Sheets
2. Styling a Tree
3. Modifying the Default Skin
4. Creating a Skin
5. Localization
6. Property Files

11. Bindings
1. Introduction to XBL
2. Anonymous Content
3. XBL Attribute Inheritance
4. Adding Properties
5. Adding Methods
6. Adding Event Handlers
7. XBL Inheritance
8. XBL Example

12. Specialized Window Types
1. Features of a Window
2. Creating Dialogs
3. Open and Save Dialogs

4. Creating a Wizard
5. More Wizards
6. Overlays
7. Cross Package Overlays

13. Installation
1. Creating an Installer
2. Install Scripts
3. Additional Install Features

Tutorials
Main Tutorial
Developer Guide
XUL Questions

References
XUL Reference
Object Reference
XPCOM Reference

XUL Forum
Downloads
About XULPlanet
Previous Next

XUL Structure
We'll begin by looking at how the XUL is handled in Mozilla.

How XUL is Handled
In Mozilla, XUL is handled much in the same way that HTML or other types of content
are handled. When you type the URL of an HTML page into the browser's address field,
the browser locates the web site and downloads the content. The Mozilla rendering
engine takes the content in the form of HTML source and transforms it into a document

tree. The tree is then converted into a set of objects that can be displayed on the screen.
CSS, images and other technologies are used to control the presentation. XUL functions
in much the same way.
In fact, in Mozilla, all document types, whether they are HTML or XUL, or even SVG
are all handled by the same underlying code. This means that the same CSS properties
may be used to style both HTML and XUL, and many of the features can be shared
between both. However, there are some features that are specific to HTML such as forms,
and others which are specific to XUL such as overlays. Since XUL and HTML are
handled in the same way, you can load both from either your local file system, from a
web page, or from an extension or standalone XULRunner application.
Content from remote sources, regardless or whether they are HTML or XUL or another
document type, are limited in the type of operations they can perform, for security
reasons. For this, reason, Mozilla provides a method of installing content locally and
registering the installed files as part of its chrome system. This allows a special URL
form to be used called a chrome URL. By accessing a file using a chrome URL, the files
receive elevated privileges to access local files, access preferences and bookmarks and
perform other privileged operations. Obviously, web pages do not get these privileges,
unless they are signed with a digital certificate and the user has granted permission to
perform these operations.
This chrome package registration is the way in which Firefox Extensions are able to add
features to the browser. The extensions are small packages of XUL files, Javascript, style
sheets and images packed together into a single file. This file can be created by using a
ZIP utility. When the user downloads it, it will be installed onto the user's machine. It
will hook into the browser using a XUL specific feature called an overlay which allows
the XUL from the extension and the XUL in the browser to combine together. To the
user, it may seem like the extension has modified the browser, but in reality, the code is
all separate, and the extension may be uninstalled easily. Registered packages are not
required to use overlays, of course. If they don't, you won't be able to access them via the
main browser interface, but you can still access them via the chrome URL, if you know
what it is.
Standalone XUL applications may include XUL code in a similar way, but, of course, the
XUL for application will be included will be included as part of the installation, instead
of having to be installed separately as an extension. However, this XUL code will be
registered in the chrome system such that the application can display the UI.
It is worth noting that the Mozilla browser itself is actually just a set of packages
containing XUL files, JavaScript and style sheets. These files are accessed via a chrome
URL and have enhanced privileges and work just like any other package. Of course, the
browser is much larger and more sophisticated than most extensions. Firefox and
Thunderbird as well as number of other components are all written in XUL and are all
accessible via chrome URLs. You can examine these packages by looking in the chrome
directory where Firefox or another XUL application is installed.
The chrome URL always begins with 'chrome://'. Much like how the 'http://' URL always

refers to remote web sites accessed using HTTP and the 'file://' URL always refers to
local files, the 'chrome://' URL always refers to installed packages and extensions. We'll
look more at the syntax of a chrome URL in the next section. It is important to note that
when accessing content through a chrome URL, it gains the enhanced privileges
described above that other kinds of URLs do not. For instance, an HTTP URL does not
have any special privileges, and an error will occur if a web page tries, for example, to
read a local file. However, a file loaded via a chrome URL will be able to read files
without restriction.
This distinction is important. This means that there are certain things that content of web
pages cannot do, such as read the user's bookmarks. This distinction is not based on the
kind of content being displayed; only on the type of URL used. Both HTML and XUL
placed on a web site have no extra permissions; however both HTML and XUL loaded
through a chrome URL have enhanced permissions.
If you are going to use XUL on a web site, you can just put the XUL file on the web site
as you would an HTML file, and then load its URL in a browser. Ensure that your web
server is configured to send XUL files with the content type of
'application/vnd.mozilla.xul+xml'. This content type is how Mozilla knows the difference
between HTML and XUL. Mozilla does not use the file extension, unless reading files
from the file system, but you should use the .xul extension for all XUL files. You can
load XUL files from your own machine by opening them in the browser, or by doubleclicking the file in your file manager. Remember that remote XUL will have significant
restrictions on what it can do.
Mozilla uses a distinctly different kind of document object for HTML and XUL, although
they share most of their functionality. There are three main types of document in Mozilla:
HTML, XML and XUL. Naturally, the HTML document is used for HTML documents,
the XUL document is used for XUL documents, and the XML document is used for other
types of XML documents. Since XUL is also XML, the XUL document is a subtype of
the more generic XML document. There are subtle differences in functionality. For
example while the form controls on an HTML page are accessible via the
'document.forms' property, this property isn't available for XUL documents since XUL
doesn't have forms in the HTML sense. On the other hand, XUL specific features such as
overlays and templates are only available in XUL documents.
This distinction between documents is important. It is possible to use many XUL features
in HTML or XML documents since they aren't document type specifc, however other
features require the right kind of document. For instance, you can use the XUL layout
types in other documents since they don't rely on the XUL document type to function.
To summarize the points made above:
Mozilla renders both HTML and XUL using the same underlying engine and uses
CSS to specify their presentation.
XUL may be loaded from a remote site, the local file system, or installed as a package
and accessed using a chrome URL. This is what browser extensions do.

Chrome URLs may be used to access installed packages and open them with
enhanced privileges.
HTML, XML and XUL each have a different document type. Some features may be
used in any document type whereas some features are specific to one kind of
document.
The next few sections describe the basic structure of a chrome package which can be
installed into Mozilla. However, if you just want to get started building a simple
application, you may skip ahead to section 2 and save this section for later.

Package Organization
Mozilla is organized in such a way that you can have as many components as you want
pre-installed. Each extension is also a component with a separate chrome URL. It will
also have one component for each installed theme and locale. Each of these components,
or packages, is made up of a set of files that describe the user interface for it. For
example, the messenger component will have descriptions of the mail messages list
window, the composition window and the address book dialogs.
The packages that are provided with Mozilla are located within the chrome directory,
which you will find in the directory where you installed Mozilla. The chrome directory is
where you will find all the files that describe the user interface used by the Mozilla
browser, mail client and other applications. You will typically put all of the XUL files for
an application in this directory, except for extensions which will be installed in the
extensions directory for a particular user. Just copying a XUL file into the 'chrome'
directory doesn't give the file any extra permissions nor can it be accessed via a chrome
URL. To gain the extra privileges, you will need to create a manifest file and put that in
the chrome directory. This file is easy to create, as it is typically only a couple of lines
long. It is used to map a chrome URL to a file or directory path on the disk where the
XUL files are located. Details of how to create this file will be discussed in the next
section.
The only way to create content that can be accessed through a chrome URL is by creating
a package as described in the next few sections. This directory is called 'chrome' likely
because it seemed like a convenient name to use for the directory where the chrome
packages that are included with Mozilla are kept.
To further the confusion, there are two other places where the word chrome might appear.
The first is the '-chrome' command line argument, and the chrome modifier to the
'window.open' function. Neither of these features grant extra privileges; instead they are
used to open a new top-level window without the browser UI such as the menu and
toolbar. You will commonly use this feature in more complex XUL applications since
you wouldn't want the browser UI to exist around your dialog boxes.
The files for a package are usually combined into a single JAR file. A JAR file may
created and examined using a ZIP utility. For instance, you can open the JAR files in
Mozilla's chrome directory to see the basic structure of a package. Although it's normal to

combine the files into a JAR file, packages may also be accessed in expanded form into a
directory. Although you don't normally distribute a package this way, it is handy during
development since you can edit the file directly and then reload the XUL file without
having to repackage or reinstall the files.
There are usually three different parts to a chrome package, although they are all
optional. Each part is stored in a different directory. These three sets are the content, the
skin and the locale, described below. A particular package might provide one or more
skins and locales, but a user can replace them with their own. In addition, the package
might include several different applications each accessible via different chrome URLs.
The packaging system is flexible enough so that you can include whatever parts you
need, and allow other parts, such as the text for different languages, to be downloaded
separately.
The three types of chrome packages are:
Content - Windows and scripts
The declarations of the windows and the user interface elements contained within
them. These are stored in XUL files, which have a xul extension. A content
package can have multiple XUL files, but the main window should have a
filename that is the same as the package name. For example, the editor package
will have a file within it called editor.xul. Scripts are placed in separate files
alongside the XUL files.
Skin - Style sheets, images and other theme specific files
Style sheets describe details of the appearance of a window. They are stored
separately from XUL files to facilitate modifying the skin (theme) of an
application. Any images used are stored here also.
Locale - Locale specific files
All the text that is displayed within a window is stored separately. This way, a
user can have a set for their own language.

Content Packages
The name of the JAR file might describe what it contains, but you can't be sure unless
you view its contents. Let's use the browser package included with Firefox as an
example. If you extract the files in browser.jar, you will find that it contains a directory
structure much like the following:
content
browser
browser.xul
browser.js
-- other mail XUL and JS files goes here -bookmarks
-- bookmarks files go here -preferences
-- preferences files go here -.
.

.

This is easily recognizable as a content package, as the top-level directory is called
'content'. For skins, this directory will usually be called 'skin' and for locales, it will
usually be called 'locale'. This naming scheme isn't necessary but this is a common
convention to make the parts of a package clearer. Some packages may include a content
section, a skin and a locale. In this case, you will find a subdirectory for each type. For
example, Chatzilla is distributed in this way.
The content/browser directory contains a number of files with xul and js extensions. The
XUL files are the ones with the xul extension. The files with js extensions are JavaScript
files which contain scripts that handle the functionality of a window. Many XUL files
have a script file associated with them, and some may have more than one.
In the listing above, two files have been shown. There are others of course, but for
simplicity they aren't shown. The file browser.xul is the XUL file that describes the main
browser window. The main window for a content package should have the same name as
the package with a xul extension. In this case, the package name is 'browser', so we
expect to find 'browser.xul'. Some of the other XUL files describe separate windows. For
example, the file pageInfo.xul describes the page info dialog.
Many packages will include a contents.rdf, which describes the package, its author and
the overlays it uses. However, this file is obsolete and has been replaced with a simpler
mechanism. This newer method is the manifest file mentioned earlier, and you will find
these as files with the .manifest extension in the chrome directory. For instance,
browser.manifest describes the browser package.
Several subdirectories, such as bookmarks and preferences, describe additional sections
of the browser component. They are placed in different directories only to keep the files
more organized.

Skins or Themes
The underlying code of Mozilla calls them skins, although the user interface calls them
themes, but they both refer to the same thing. The classic.jar file describes the default
theme provided with Firefox. The structure is similar to the content packages. For
example, examining classic.jar:
skin
classic
browser
-- browser skin files go here -global
contents.rdf
-- global skin files go here -.
.
.

Again, this directory structure isn't necessary and is used for convenience. You can
actually put all the files in one directory at the top level and not use subdirectories.
However, for larger applications, subdirectories are used to separate the different

components. In the example above, a directory exists for theme related files for the
browser and another for global theme related files. The global directory contains skin
files that are general to all packages. These files will apply to all components and will be
included with your own standalone applications. The global part defines the appearance
of all of the common XUL widgets, whereas the other directories have files that are
specific to those applications. Firefox includes both the global and browser theme files in
one archive, but they can be included separately.
A skin is made up of CSS files and a number of images used to define the look of an
interface. The file browser.css is used by browser.xul and contains styles which define
the appearance of various parts of the browser interface. Again, note how the file
browser.css has the same name as the package. By changing the CSS files, you can adjust
the appearance of a window without changing its function. This is how you can create a
new theme. The XUL part remains the same but the skin part changes independently.

Locales
The file en-US.jar describes the language information for each component, in this case
for US English. Like the skins, each language will contain files that specify text used by
the package but for a specific language. The locale structure is similar to the others, so it
won't be listed it here.
The localized text is stored in two types of files, DTD files, and properties files. The
DTD files have a dtd extension and contain entity declarations, one for each text string
that is used in a window. For example, the file browser.dtd contains entity declarations
for each menu command. In addition, keyboard shortcuts for each command are also
defined, because they may be different for each language. DTD files are used by XUL
files so, in general, you will have one per XUL file. The locale part also contains
properties files, which are similar, but are used by script files. The file browser.properties
contains a few such localized strings.
This structure allows you to translate Mozilla or a component into a different language by
just adding a new locale for that language. You don't have to change the XUL part. In
addition, another person could supply a separate package that applies a skin or locale to
your content part, thus providing support for a new theme or language without having to
change the original package.

Other Packages
There is a one special package called toolkit (or global). We saw the global directory
earlier for skins. The file toolkit.jar contains the corresponding content part for it. It
contains some global dialogs and definitions. It also defines the default appearance and
functionality of the various common XUL widgets such as textboxes and buttons. The
files located in the global part of a skin package contain the default look for all of the
XUL interface elements. The toolkit package is used by all XUL applications.

Adding a Package
Mozilla places the packages that are included with the installation in the chrome
directory. However, they do not need to be placed there. If you have another package
installed, it can be placed anywhere on the disk, as long as a manifest file points to it. It is
common to place packages into the chrome directory simply because it is convenient,
however they will work just as well from another directory or somewhere on your local
network. You cannot store them on a remote site, unless the remote site is mounted
through the local file system.
There are two chrome directories used for XUL applications, one is installed in the same
place where the application is installed, while the other is part of user's profile. The
former allows packages that are shared by all users while the latter allows packages to be
created only for a specific user or users. Extensions, while installed in a separate
extensions directory, are also usually user specific. Any manifest files located in either
chrome directory will be examined to see which packages are installed.

(Next) In the next section, we'll look at how to refer to chrome packages using the
chrome URL.
Previous Next
89504e470d0a1a0a0000000d494844520000000d0000000d01030000004825763f000000
06504c5445666666ffffff734b59a80000001b4944415478da63606060a8ffc05001430e025
0041701ca32300000ed4f0c3f3cbc7cd10000000049454e44ae426082Add a note User
Contributed Notes
March 17, 2007, 6:04 am bik dot mido at gmail dot com
I think that rather than GNU unzip he means Info-ZIP which is probably the most widely
ported implementation across different platforms, and the one commonly installed under
Linux distros (and I suppose other *nices)...
November 5, 2006, 2:14 am robf at NO dot knology dot SPAM dot net
Also in windows you can simply add your zip utility as the handler. While he's correct as
to what he says about gnu zip recognizing the magic number, most zip utilities on
windows are exactly the same. however windows doesn't know what to do when you
double click a file (since windows proper bases this on the extension) if you set whatever
zip utility you use as the handler for a file extension it'll typically work (test it out and
drag an xpi or jar into your utility if it supports drag and drop.
February 26, 2006, 2:16 am st1d at wildmail dot com
On *nix systems, you don't need to rename .jar files to .zip, as the system recognizes files
by their magic number, not by extension name. They unzip just fine using the regular
GNU unzip command, too.

May 4, 2005, 4:10 am nobody at monkey dot island
I've been using Ultimate Zip which i've found to be pretty good. it allows exraction of
.xpi and .jar files, and has an option to add to a jar file, so you don't need to bother with
changing the extensions :-)
April 9, 2005, 6:55 pm shahfazal at gmail dot com
winzip8.0+ allows you to open up jar files too.
March 18, 2005, 12:38 pm x20050313 at vyking dot com
or you can simply rename a .jar file to a .zipskip to content

89504e470d0a1a0a0000000d49484452000
000d7000000410803000000759cc1d90000
0300504c5445000000000008000800000808
001000001800062b0408000008000808080
0080808081000081800081c0810000810101
0102b08103121121e0a141804181818181c1
c182108182c06182d18211c1c21212121291
8232b09242927252d182646132936142957
bd295bca2a5ab22d5ea32e3e2a2f4da43131
2d313939315ab1315eb93163ca3167c9335
4903365b7356dca3668ad376cc23956b539
56c53963ca3a6cd63b44203b58ad3c609f3c
65ba3d3f3b425ab94261ce42638c4263a042
63ad426ba54456294468284573b94765aa4
768b54855374a4a4a4a5c944a63bd4c5644
4c59654d6e254d74a74e564e4e6c35506ec8
5075bd5263bd527bcf5464915468b55768a
757762f5b6b295d5f555d66445d77415d87
446181cc657259657ea8657eba696c6f6b8e
486c87ca6c8e616c8eba6f77836f92d47099c
6709f5f7779737c9cdf7d9ace7fa66a818a7d
81935481956b838cac8a8f828c948c8ca682
90a5e294a0ad95b1e597b5d498a8d098ac6

798adf399bbf49cb28aa5b2aaa5b5b5a5b5
daa5b5efa5b5f7a5bdfda5cef7a7c88ea9b8
deaabdecaac8ecadada5adadadadb77eadb
df9adca73adcef7add6b5b1b59cb1c6ffb1c
aebb3c7a2b5adb5b5b5b5b5c6adb5ceffb5
d6f7b5deffb8c28fb9d2ffbab7b7bdbdb5bd
bdbdbdc6c6bdc6ffbdcef7bdd6f7bdd6ffbd
deffbde7ffbfcadec0d3e8c1c6b9c1ce8fc5d4
9dc6c6c6c6cec6c6ceffc6d6ffc6def7c6deffc
6e7ffcadbaecbd3f7cec6d6ceced2ced6efced
6ffcedeffcee7ffceefffd2deefd4e0a8d6d6ced
6d6d6d6def7d6e2fbd6e7ffd6efffd6f7ffd6ff
ffdaefb3dededededeffdee7ffdeefc6deeff7d
eefffdef7ffdeffffe2f3c6e7e7e7e7e7ffe7efefe
7eff7e7f7efe7f7f7e7f7ffe7ffffe9f3afe9fcc0e
beffbebfbefecf4e4efe7efefefefefefffeff7e7ef
f7f7eff7ffeffbceefffe7efffefeffff7effffff1fcc
0f5fdb3f7efeff7eff7f7effff7f7eff7f7f7f7f7fff
7fbdaf7ffc6f7ffcef7ffeff7fff7f7fffffbf3e7fbf
fe7ffeffffff7effff7f7fff7ffffffeffffff7ffffff000
000000000e319894f00001ab14944415478d
aed5b7b5c14d7d93e7b11d811dc55881744
c50405b122186ebb8a1005d144440ca2881

714898a881754c4265ff5d7a4899ae4cbcda
4ad9636c5e6666a2ead4d4cf3d9aa8d31016
33e935d43127437ca24e0ceb8ec1c767766cf
64bff7ccec6234a609c91ff9f2fb750067762e
67cf7b9ef77dcef3be6744f28fbb49bdffc818
7ee846a4abc7df7b433fae59e45ad37a8fb0f
22bfd64ed52baaff45feab542fa4106fdbfb0
0b0b186339689524ca047fd5c01f62df8f6b
97d06b18d84088480472ad613f55bc08165
48e10087112bfdbef249c6a1627fc20f37ee4f
8e264b0c32908825b78a46e68e68ccd3e37c
025f14028c409577fa27649a22412226caa1
b3a66d4e6cd2bd7ad5c747bbcaf8b5e700a
b2f0d3f5434912459f734cfcd2cd9bd7ac5cb
7f99efb5ee85e64211247c02f9d82f307cc617
af4e36e1a2d4a8e9f8ac42b11fd08e94918fe
b9fe53a23705ce4ef086a1813fa4e11f5b6d1
0f7c8e8752b8ba7ad59b766c5ba87defafca
db87a220ae4b95d2f5af04f36be588c3f7e32
6e65c582d98b674f5bb078f6e2f50fbdb729
ae93940f1f3e668ce5831f20a6d00d84daf57
240be4608e09000228a0a0adef495cfd257f5
51ef3dea65f2d533f0206685a1a61915c5c5d

346858d9a3d7bf68af56fbeb7a8dc4d5ed49
72f7d72c4980e419ddd48dfed92825f47e95
5ed0b266adfa9460bcdff5808890275ba812
9946e411d278050800f8484ee8123ba1395d
9561d0cb82c119904cd533c8c87b9eb9245a
b5d34638c5eabd7175714574c5bbfeedce37
16eb7bb7fc5b4cda306aefcef81d841db833
ba53ee3a57e9974758449688415bbae354c5
60502f4176c09a125f48ea96a1051ef26bd4a
fd3ac03a61e60a06cf05a41d31b450481c3a
6664fcc891912bd66f7f6fc6904b9b8654ac5
8316ae0ba9549365e96453a623cdf67bb60d
62782a07446a4c31e1a57da73aa6e88a8742
96820c641a90d7be91a37a540f969cf053f75
20da1b055e1c7280ab5edd4ef1e22418b4d8
58556f3889db5f37fcf60d1b5e7d5caf8dd62
e5cb1226ccd9a755149740c9d4aab7d99a7
29cffb0c018d5713f0210f13d007024803bfe
84b1dec0c2880904ed6e99097a194acf3460
450f7008548bd06a45c53595507bfc1637ac
5074d7823bc4c4083bcf0d96b081e8458d83
502b94c462423d46dd7a130f8804cae30f4f
07dc909afe8e7475fbe32322085cdf223d750

ce15a5954dd0a86842c63ef2bc32a214064c
c855c2507fd4380ac95380d5edf6abea3418
7d210756a003b888029b107a98b6acb6218
7a43b858a0e3ec72931e814e0a64d7596dbe
bfc6e22c468973ebfc130a41818b278dded6
3ea4422f6f89d1c34c6933ed0879e8ea14136
003430dc30ac1e461d718357f901e4029a80
4743c71beed41828a800e397141b830aa68a
9316b005f83548f9680804b151b00a04b481
109a145914e9359802c818d05e79e1d303e9
2e0b349faebd65cbc7cf318b1efb68a0a5b9
07195dfd7dba2372838e68c23403bdf0a091
e8fa8897a49283a484d6756caf7c10548e082
1037789417ce4de53c4e3f7cb34602449055
905893e034c285d3f9310d9492e0c8ecf0c8b
ecd76f9469da5210519bef797551e652fd908
a3d1586850b3347ad596981c896ecb27041
c07da30d59afe003c30ee1a195b51053ea88
c20022141a621534cdd5580a205d401b1a1
97a3b9c0a907edefe2a1ab216113d7dca8b0
c3a1990d429b8062068832d06ba8d0193b7
227e181a86227c282aa25f8f183e302f7af31f
f7214e3e577c0c1e62fd612f209dc710bdf39

3ee7195f18cd720f701304a7b902d001dc18f
004e2f4b5d303df97c3e511669c620711886a
a4b967c128c30911d12e66894096e3be6e11
2e6384c387a0e36d10e7180254ef2fb643bef
003dc113d1ef14ecd861279f78420102d916
70dcf0cce2e2c58b17af51b615f49fedeb5e7
875fd90cc15dbb76756dc86065d84ef79724
6c5e6babaff8ab2082afedf9de789cc012bd8
59ba39a023188ce0a8abf160168fb1c38179
07b801f89abb5d803b1c9875586d2c76c04
5b89d80f0c6329c840b4a2b30959ee79c709
9b5d958fa34666dd034efef21415942adf28f
4c5c54316d01888cd90b162f580c426af6e2c
52bd7afdff0db175c5f7cbe7e211a1ce759b9
7451c5ca958b6784e9f5dab831e0e7dfdd2e
85a7d8679f3d7ee2f4e9d3b6d3365b8b956d
7997f617b7fde37d2b6bb5d96cad36077efb
94e30c98f1cfc6c69d3b1f6dded7dcfce8ce8
6c6adcf38304c7c6ea0abbffdeded362b1802
cd1c3ff4e71d3c766cadfd79c3dd4f351ffaf3
d3879edab97667e3568c437203628bdc3ed
8b2140446265806b015178785551467f62fa
ea8d850b7e1cd2fce2d5c1877dba8ccdb00d

0a5ebee7bf5a3b73edf33d8df17bca85d8e9
6ad39397979d94b2a9754ad2e9a997347e9
efe9a8379696969556af5eb6ba3267e6cc998
d028cb9ed99d299f95993cde63b0bb2b2e7
97953ed1860537713bf1bb1be1e6b2caeaea
a2654539334b4b01a33b66964dc8ce9a357
75641517e7e765959e9291cd232e05173a20
b67240ed66a33c192db46ddbe346ef3a262c
bf09171a678d318edfa735f9cdbb3674fc53
4406bcdba756bd6ac5ffffcb90d83e53ed90
528b46ccc299b9a9f9a92323d2535b7686ae
95dcf8007b13b4acb72b227e4a526644fcdc
bc9f98595bad8a91d3b6ae78d4b4f4f1f5db
0644b63e3df0824137ea75b6e7b62e3b2656
5b3b2cce6d409f9951b3762bbf08b6d8d5b
564d4e9e72339c5abd65cb8e1d3cdbdb31c
1121b9bb8e99ee1286e51e648a41dbc7429f
15b6afcdcef3f89d422ad411fbffda137f78cc
a84485b73cf3dd3363cbf7dfbfa2f3e1bccf5
c12eaa726170d90ff76d292948c9484b5bfb
ca89132758dc8131d776fac4bf4a52a7a796
dc7b84b5d3b8b23b700b7be497e629e9379
b7f7e84c5a05c79a544c1cbe71d9779ebbe3

b93a7242ff9b5956da33cc2daacaf2f49ceb8
392db5e1183ecf9fc71d21152951a6223d24
bc7fe2c8c4a5e1c32dfe2e1a74a0939ebb7dc
e9c3931b72d5cb870c5f6737b8668f543d6b
c539cb9fdf373db7ffbc8b03ecccb888a0137
e1209ccebf569d959592bb8ab287131499e4
95f1695b51c1b83b9b8124fcfece4e454860b
6b5322ddd3cf7155b074c2b548e4a54c5da
7187606b6d98347756c3691b084760998f61
28b698c74f4c29390d5c24393fb9743591a1
c3412c31b17ee22fb7d4508b947a8d97cc40
da399a48300c729657af446b23b5e58f68e3
ce7db17dc08c61e7fba27b813f2951f1d0c1
b7ab0b0ab24a5e77f082cfeff789525787ad7
9eabc829fb30e4ee8f1c009b1d3e7ee386bab
1a67362f69652f7a044595d3c91818d47de9
03db1b256353eeb6e10b44ea9244c1dd8ef7
158c9e98baed0416459fdfe30e9562002f80d
8b209661590bb20ba6076e195d4414c44c6
3b40a564ce5eb860cd8637d7472ff50f4f1c9
e99f9fc6fc3c3357dd6f341f7c0ad956333cc4
bac32e981b988904edbe9b563e757b2ac32
9a8a5407c187d98682f4f42a1b16fce49a523

b60692d1997fbb203cb217ae05b52937f967
780c5122d7ade20eec957d346189ea30825b
6ff351669a3e366afa8d8f366b4c7cfd50c23
9e45cf0dae89fdabd4f77c59b18b7da02425
63ee16bbccc14cea7412dbbdb9f32a0fb16e
2249419145252fdb604e3757d96441fc5a73
8ecae4fc0374e4d52a19c12df9c9e9f907202
9c4e2b746073875fb7e14be09a6f511fc506d
fcc205dbbfd8fea487ba44676761acf8c4feef
5bdfc0b686dcb4e48207582a2238824f544e
98ffa80307dd8780ca13287f36cc1a6fae623
1f99a5dc451652e38e0e84540c4adf9e9e6dc
668ca980fc0e0aafbd2ec27058014e1833a47
8e18a73ef65fa084d9589b35c929ff8de75b6
91a53d1f48f89da44c29ca10e6fbecaf17fac7
cf8d168d54e8a9c993c1cb183a61efbf9126f
31aa2e92e5a86dccda7a4677e83a69f7b183
cd60d6afcdbd2276f9814dfea1b5648f4344
5387dab1ba10ecf22bd264c92aec49b9ed0c
96bbe779ded3c3e52953af196aa562cca3cf
bc782dcaa53542fe260f24fe981e2a5f8e10df
012715572de01258d0e46ac350ff03ac4866
a03df5276b3cb31680e3cc901b4823b3aeeb

6f59bee1195ac0dbe97ce26dfd30f218af063
25b74c4c69809eb0d6eaacfcd71c94ab20fb
17d45207ed1dfb4d7e88a95db92fc39da292
f2c318580b20be5e063fa415866f2d9bf1984
1f54ea55d4e768fd46a172d2a7c0eb7d30a0
fe95b5dfbfa7aef95f0e9acdb197edcb4ce19f
6e2a9a49b4745bb2221cd8034258266fa34
b9f40ef8263f34b8c2911e61b851afa49534e
b0928df201902083cf8db1c111df4a07148a
3e3a291e9621c64509fb6c61d9f1def357a51
b791416a4ef59db6ebed32b946950aaf0f02
a971d3672fc6f75f8f9cd1c297d188f1407ce
97ae3cb65e8875c03bede5a00e9fba3487aa
051c251461a4d7fb74940c66ea3ce204bdf6
298017da8934d61448a46dd8111ae3ba6e9
1f1bf4d9cb8f5f8ce9367a4cae30c9f47de30
b83b738b1adca3c37abfa74755e598b1577
10412d03aa629afb777c0844bdca9cabc417
51fc50c2b6dcb4607c89c25797876841ea8c
5ae4e042a7382cd730887e1347f5089c700f1
fde74930c791e47a76ec8ee828f2bb591de9d
1cfad41e2c5971d7fba18444a34933f20e37e
ffef0918bbed1c3a30203bc414c2904b22e4c

3926dfe087813012cca83511941ed5ec1ba1
01de30a43384ca51b2cee432c5bb5e7ad599
683078aff01fb049e6bbe39dd864400e9faed
ba809988811717aa3c953f7d1fcfd1747741
bbd22022fbc32c2453d0a99903d1eb95cf1b
48c45ffe8efa96c139c8078e94626d3757ee8
a5bdfe326098d1f65a84f09198b32ca00bf3
ba8dde309d5a1350ca39d40ff5e8c67ea8e1
42ed519e37a8ae89500fe5795917f242c9e00
a43b2e936c49f7b3262d2caa8f31ffde5d0f3
07b34d606dfb9731c66e9306e9edf1d1dd70
e7e208ee84175de927218609b8068255aa1d
267bbc493904031118fbe08397f72f87a3702
38a126e1c5f2699639639def11884a1c8d819
ad312aa5aa803ea0a107a2c21b2e831fddc0
d9bd11d144ad96e854bca8a932ea0fbb488f
0185ea8761f4d98ba6f8fc11c70e75a3c580d
0a1bbdb56fe390bbad98da23526dad181d0
69f962bcd710ee429df148327d1867425706
2aa6503ce25d14386a27dc1eefea10d0303b
9c36c0dc67a2a5c66be34b1094ca949d3d3
d3de3e6f43b9bb1601748b0e0a496a3ff2dc
fcbc1f8a2d31756e7335b6efa0de24bad62c3

5f224a52aaf5071954435b675021e4073814
265dff2bcb4e4176caedbc5285e165ce29cb9
f2a6598605c714a94de15ce70eac960b85e8
35780b9c2e8ba237531ee738818d0a57f4d1
a1613418bb2b2c8501f54ab864875c01bf2a
1ef6b78a17efef0afc5178cb54bc15b631c44
7a40874ceac7fce59726e4f0a0f0c86ea3c165
bad26d0a0c7c671fba49661767754334a297
84dc3823850b8df69a5c32f2b4bd78383e31
675a0a8db72891a1c0b9069b645169f95a3f
0c4405507f21dcfdc1df7b0621fbb0cbcf146
5f484eb259d56e3a1aca1d55123bde81bfdd
010a10f55e242f185fcfd025f8f2f13350c7c7
ed047480f66b9e2c7bf7f11fa6547e1d14acd
14459834677fd7601c703910d1ec8d7fc7f0c
6d153cb16eb022ed3ebf7bd5ff9383c603fb
6dffa10ffbba757ee363dbd021af5245d668a
7f29313a8651b8e06abe4097e009102a66ad
b5538b0e544e9f72ebbc3f6098fd250953e92
bd19507acea79ea870221d72d981111af32a
7523daf68645a4eb5e69bd3f3afea28ac16b
6a92001fd803b0b51a1e2515c21a28eb41f3
13592cc4bb29d38b97ac372994f3402f1ef67

1013c1ec97455e3e3c279ca991bb04e94c4cc
4997679bf2689e34ed6d4c53296e5f5355b4
5d5c185908ea2493374d3edbe24637b1bbb
33bfac817da53239e3d6f9c7b1cf090edf5b1
1065fe7d986b4d16955d87d415d14524af57
45c30f149ab46a7fe062b390d687f105fd6fc
5993c12e65b187a301ec16b0d00171029fec
82ddc258d4c92c11958328dc6b44757c3000
77a17ad8973337b593334d9d35081da4019
404e86e25f0c09c88ba76b82b1c9da4b7c71
86b644e225fd787b4042670b8836359f6a9c
a096bdfb7da1e2848ce985b6db5135af4974
2656891805d293f4ba96221d1bdee5d2651
c44b6e4efd934354ec9254bb0a26e737835d
740d4ba0eb1698822f093e911a54882ccaa2
d14906d5c1c9fa70b4a99dceaf009db15c82
c31a94a874af0631ed70be3c71378ad90dfd
3f6a4407e93c8cd0fe76e00aa3423bd7e9de
d06a08248f12d8d5ba6442d96bf802cbd6e
69993b3b7d9580a86a4be3da77498dd367d
62f212252b1682ef6d49c132ae636e5aea1b
aca8fa218865d63ab5c03cb5d9c6727e113c
90a8aba26297086370b94b922cc802ca826

b2f47b16764bb5487345b9d8a06e186dd44
97c8c0f0390a10e51a03e8939ad8dd871900
8e9377a111f47bff87619a28de302c3475bd1
eafa0659257b2e3d30df9d98ff1ee0b026ead
4db865faf45f434242cbff0256575321881e4
bcd185fe2c0924404b7f24a53a8057c2a252
5fb5f92922e830102e66df966735eb30dfb7c
caea271d3a89f864891395c3a4f0c233070fe
e9d1361dc4addb4061977ab13c072b49fc2
76066996c3979e912d8c5196f732bbf8dd0c
6a823be6200b25f6e50c029e6f3f03698074c
db21f0ad52668e15af47a39dbc345b9b5e7b
1d3dfd5868f2d49499f5ef2868388744504d
388a1e420bc949531dedc42ed720b7ec14f1
7bd14f9c8e3e6d494a2d39414e87a3005c70
176e51e60b1e8033b79d527fc1ed90136f27
058681c510769271ad624e24f9d721d8af89
dd2bd93a850f1c6fa70081c788e4b027f3c1
903a4b217f0024063813de4a63a44dd5499f
e76f1375a5fa60b3f8084e4c547962514bd0e
2c08f1c1b30f4f4f9e98b0c50a162b2bb1980
068805d5b41faf8e487598a17fd099a054e6
66d48495dcd4aa2ac4624b4e1c84d4f36ff8

695458827494de1448f1b3ffbf777593a7d0
35e5d87f7ef3d0c7d8371b7d744286050b8b
61265de36a27a4ee5cb72aed0c20b5dbf679
84e8840861911c1180beb4f9ea1f8363168ef
b5cbb40893abaf3048a2d4b225216f1bcbf5
902e59ea146cb577de9296f7804d59ff57d6a
095fe3aaad2c78f5ffd219642cb9682fa7627
df5a323df5615614836bcf22589a6f4e4bbd
d786fd3ebfa864ddc0959e0e6b75e9d6e394
fc21be40c653726ea7dd2f57eca270c53a292
bec8f45a84912e0b010d56c1d761280da8b1
8b8f12442754d906f5250e1e926c434a96bd
6bd79a54159dad2a200cc6558887eeddde1
494b067ca9d380ec8c462317fce966dcf9567
e678431007203197c3485d2a141fdbcfa8fae
c463235dec02c548d50815eefca77a53fa00a
451d7c594f545c9276b91578a50153042da4
080185d7eac8d19d01de98d824c314a2782
d4a3e2bc9bf7294a061d30a60f00756e7fabf
431264aa042fd08839a1765c926571bf2209
3bd03a1d4650819411a5249ef459e2897c97
46dfe05e98ed3ef76badd6e3bdb3c7756c91
1eceee17860091fe1f0b1aaac49e655c71ce7

2549f4bb314f20aa24dc5c303a2361b50dab
b567f0612035bb1db75417a46eb1e14ec0c9
8ee576e2f4c98e6c734a4a6d2beef4893ee19
25d269d7e9fc0ff615e4e2b4bf3fd2434a7bd
3767e2e4420629322f16eda2b954930508fc
0c50962423c698d8456fd9045d560052a633
b87b6b3be13651bcce7c45772aeb5f02e717
c805e163813d503b6ed2cfadd8ef87298bb5
031f70fc1f964c9a625e6be52f77896e8279d
1add4195727a4a54ebf9b75b821cf7476d28
08279cfd65834a1e42996bed0ca09025dee1
3f996a9e6947125af0347747130750974610
db7ad9d5c6dfdc00dac68a17a43d1aa1cf52
88baa7fda8d102e7032a909ec51bb0feaa85
ea69457ae8985bb0f1b3435aaec95d15199a
f8b50e28babe143ef8528ed7030d60ee8d8f1
d5d3138a6c6cc7274eb7d0d1e1162e789c98
dd32297d746a430b686cbacaebf388c4dd6
17db624212d21ebd156167fe8a48b9b9de7
31fbcab6a29cfc069bc3413948207435133b
9eca4f4b4fc96d38c4f3caea5e8780cf3aac0f
ce9bbcc3d6217fca031f26812882d459c5cc0
2c103401d063460570ef487906a3550a65d5

60407932402340c5aae26c94d8930bfd528f
0c9edb19c6aab6a17e6e5368cd996fb2b531
3cc95c7ad18db7147072bd0b79358f66e734
6464a5eed31878d6579ecf3f8416d09d6078
ac64d9f5250fb92cd817909041db6eeab2d9
a30b5c1caf27649f101200907fbf25a73fac4
8c71b9953b5fb3da5ae9b2256b6d7974dee
479bfb609ff0b4c6f81e9956b6f9714dea0ec
409d4cde45e50357137b863f4a4f404f615fa
ea621b14c121cb4cf6100276aa8a5064ed72
363135cab9f23a9be09bc01e9629874e96df
4596787d6a10fd7b99e1f329e211163a3919
b9c707a9c3e47578437eaa20b47c699868c4
d824c45131880861505408a7bda3a07c4cc
ba2932ea82f5acb383f72524540c8c0883b4
1d82390cbd8afc9f5c79b7c787a24557db27
470745322650fb2eb60ba1cb83d38d5f309e
80d58ee4b32910ef7613e4bdf1c8811897e99
dac8c6ef4e451a7e78914572be3d9ea4f9913
6d4728edc250824d2e168db21f2b8e2f7c13
dd7d6f6ee4b1472eec35d9911f759fa830bdf
3f46ea1973c6832c8ffa56ce6fc79f326df3a6
54a56d6d8f9f3cb7236da79beed9f39a5457

9d979e694b489135313b273caaa3f7440d48
370754ad2f93f5667cfcdcaca9d5f307566f6
cca9f9532764553df83e108b404b2c107667
ef2a2dcb4e1d979e919e36779cd93c362b6f
6afebc79f9f9055905b34a6ad90fdcee33f2ee
1884ea8f0291d3a20b04d808002a29661717
1bc1a011a040b87a266244cd51b91d2628c
5bdec0711687bb41fe28c613489168d5199e
fb61ae0c14263b9dc250b2a0d297ee878e6a
ed2d2eaeacad5ababaa6bab565796e6d43b
78fefc3f4a97555757376edbb673cbce86dad
a8da51b1d76a002f04dba0ce1b0edab2c99
9f9b303625cd9c929d37b5fae953185366bd
80b104bc7376e3b2ca65ab6b1b1a1a1bb63
5feeafe5fddbf635b63e3af1a37d236abef07
02dd35209c515e0d62987a59ad25c171e1f2
9a9372bdd158739800c12d4f3aace8a326aa
9760df598f2cbb4ed2f499df958898d8e507
21d660503681ce4adadf1e4ca3d5f7f46895f
a5d6033ba686e636d56dbe9131dad3c4dba
3aec0e657d9f672127b342203940f6513690
249fe8fe98b5b5ec7bf0ee55ab562d59bbf63
747ac2c98c5f50097822811393bb69ea58bd

4107fb40db87a1e039f76d8e8e6107849f48
24454e7d2f620b5c93507d59299a4768fe33
ad509a03d544f930f1f54df43772aea4aadd
7297b49e0d444a097e7d537d3f0359b22d3
83274347bd19892ae149e85ee50589d033e4
eadb964aabd7fc5c6d12ffb0ffcdf013f8ff29f
fb1eb3f76c1f67f76c7eee6396c6c700000000
049454e44ae426082
Home > Tutorials > XUL Tutorial > The Chrome URL

Contents
Top of Form 1

Search:
Bottom of Form 1

Single Document Version
Download the XUL Tutorial
Element Reference
Quick Reference
Key Code Reference
Template Syntax Examples

1. Introduction
1. Introduction
2. XUL Structure

3. The Chrome URL
4. Contents.rdf Files

2. Simple Elements
1. Creating a Window
2. Adding Buttons
3. Adding Labels and Images
4. Input Controls
5. List Controls
6. Progress Meters
7. Adding HTML Elements
8. Using Spacers
9. More Button Features

3. The Box Model
1. The Box Model
2. Element Positioning
3. Box Model Details
4. Groupboxes
5. Adding More Elements

4. More Layout Elements
1. Stacks and Decks
2. Stack Positioning
3. Tabboxes
4. Grids
5. Content Panels
6. Splitters
7. Scroll Bars

5. Toolbars and Menus

1. Toolbars
2. Simple Menu Bars
3. More Menu Features
4. Popup Menus
5. Scrolling Menus

6. Events and Scripts
1. Adding Event Handlers
2. More Event Handlers
3. Keyboard Shortcuts
4. Focus and Selection
5. Commands
6. Updating Commands
7. Broadcasters and Observers

7. Document Object Model
1. Document Object Model
2. Modifying a XUL Interface
3. Manipulating Lists
4. Box Objects
5. XPCOM Interfaces
6. XPCOM Examples

8. Trees
1. Trees
2. More Tree Features
3. Tree Selection
4. Custom Tree Views
5. Tree View Details
6. Tree Box Objects

9. RDF and Templates
1. Introduction to RDF
2. Templates
3. Trees and Templates
4. RDF Datasources
5. Advanced Rules
6. Persistent Data

10. Skins and Locales
1. Adding Style Sheets
2. Styling a Tree
3. Modifying the Default Skin
4. Creating a Skin
5. Localization
6. Property Files

11. Bindings
1. Introduction to XBL
2. Anonymous Content
3. XBL Attribute Inheritance
4. Adding Properties
5. Adding Methods
6. Adding Event Handlers
7. XBL Inheritance
8. XBL Example

12. Specialized Window Types
1. Features of a Window
2. Creating Dialogs
3. Open and Save Dialogs

4. Creating a Wizard
5. More Wizards
6. Overlays
7. Cross Package Overlays

13. Installation
1. Creating an Installer
2. Install Scripts
3. Additional Install Features

Tutorials
Main Tutorial
Developer Guide
XUL Questions

References
XUL Reference
Object Reference
XPCOM Reference

XUL Forum
Downloads
About XULPlanet
Previous Next

The Chrome URL
The following section will describe how to refer to XUL documents and other chrome
files.

The Chrome URL
XUL files can be referenced with a regular HTTP URL (or any type of URL) just like
HTML files. However, packages that are installed into Mozilla's chrome system can be
referenced with special chrome URLs. The packages included with Mozilla will already

be installed but you can register your own.
Installed packages have the advantage that they don't have security restrictions placed on
them, which is necessary for many applications. Another advantage over other URL types
is that they automatically handle mulitple themes and locales. For example, a chrome
URL lets you refer to a file in the theme such as an image without needing to know which
theme the user is using. As long as the filenames are the same in each theme, you can
refer to the file using a chrome URL. Mozilla will take care of determining where the file
is located and return the right data. This also means that it doesn't matter where the
package is installed to be able to access it. The chrome URLs are independent of where
the files might physically be located. This makes it much easier to write applications that
have lots of files since you don't have to worry about the details of locating files.
The basic syntax of a chrome URL is as follows:
chrome://<package name>/<part>/<file.xul>
The text <package name> is the package name, such as messenger or editor. The <part>
is either 'content', 'skin' or 'locale' depending on which part you want. 'file.xul' is simply
the filename.
Example: chrome://messenger/content/messenger.xul
The example here refers to the messenger window. You could point to a file that is part of
a skin by replacing 'content' with 'skin' and changing the filename. Similarly, you can
point to a file that is part of a locale by using 'locale' instead of 'content'.
When you open a chrome URL, Mozilla looks through its list of installed packages and
tries to locate the JAR file or directory that matches the package name and part. The
mapping between chrome URLs and JAR files are specified in the manifest files stored in
the chrome directory. If you were to move the file messenger.jar somewhere else and
update the manifest file accordingly, Thunderbird will still work since it doesn't rely on
its specific installed location. By using chrome URLs we can leave details like this to
Mozilla. Similarly, if the user changes their theme, the 'skin' part of the chrome URL
translates to a different set of files, yet the XUL and scripts don't need to change.
Here are some more examples. Note how none of the URLs specify which theme or
locale is used and none specify a specific directory.
chrome://messenger/content/messenger.xul
chrome://messenger/content/attach.js
chrome://messenger/skin/icons/folder-inbox.png
chrome://messenger/locale/messenger.dtd
To refer to subdirectories, you can just add them to the end of the chrome URL. The
following URLs will refer to the bookmarks window, listed both for the Mozilla suite and
Firefox, since the package name is different in both:
chrome://communicator/content/bookmarks/bookmarksManager.xul (Mozilla)

chrome://browser/content/bookmarks/bookmarksManager.xul (Firefox)
You can enter chrome URLs anywhere normal URLs can be used. You can even enter
them directly into the URL bar in a Mozilla browser window. If you enter one of the
URLs mentioned above into the browser's address bar, you should see that window
appear like a web page might do and for the most part will function as if it was a separate
window. Some dialog boxes may not work right, however, as they may be expecting
arguments to be supplied from the window that opened them.
You will also see chrome URLs without specified filenames, such as:
chrome://browser/content/
In this case, only the package name and part is specified. This type of reference will
automatically select an appropriate file from that right directory. For content, a file with
the same name of the package and a xul extension is selected. In the above example, the
file browser.xul is selected. For messenger, messenger.xul would be selected. When
creating your own applications, you will want to create a file for your main window with
the same name as the package, so it can be referred to using this shorter form. This is
convenient since all a user needs to know is the package name to be able to open the
application. Of course, for extensions that modify the browser interface, the user will not
need to know the URL, as the extension will present itself in the UI.
For a skin, the file <package name>.css is selected; for a locale, the file <package
name>.dtd is selected.
Remember, the chrome URL is not related to where it is located on disk. The first two
pieces are the package name and the part (either content, skin or locale). While it is
common to put the content files in a directory called 'content', this is purely out of
convention, and these files may be placed in an entirely different structure.

(Next) In the next section, we will look at how to create manifest files and packages.
Previous Next
89504e470d0a1a0a0000000d494844520000000d0000000d01030000004825763f000000
06504c5445666666ffffff734b59a80000001b4944415478da63606060a8ffc05001430e025
0041701ca32300000ed4f0c3f3cbc7cd10000000049454e44ae426082Add a note User
Contributed Notes
No comments available
89504e470d0a1a0a0000000d494844520000000d0000000d01030000004825763f000000
06504c5445666666ffffff734b59a80000001b4944415478da63606060a8ffc05001430e025
0041701ca32300000ed4f0c3f3cbc7cd10000000049454e44ae426082Add a note
About XULPlanet Contact Us mozilla.org mozdev.org MozillaZine.org Hosted by:
WebAIM.org

Copyright © 1999-2006 XULPlanet.com
file and open it directly. Jar format is identical to Zip format.
March 15, 2005, 1:34 am dont dot spam at anonymous dot com
Under Windows, JAR files can be opened with winRAR; thus allowing you to browse
them as if they were regular directories.
January 23, 2005, 1:44 pm joseparrella at gmail dot com
In Linux, Midnight Commander (mc) provides an easy way to sneaking into .jar
packages. Just browse to your Mozilla base directory and then enter chrome and just
press enter over any of the .jar files to see the folder and files structure.
89504e470d0a1a0a0000000d494844520000000d0000000d01030000004825763f000000
06504c5445666666ffffff734b59a80000001b4944415478da63606060a8ffc05001430e025
0041701ca32300000ed4f0c3f3cbc7cd10000000049454e44ae426082Add a note
About XULPlanet Contact Us mozilla.org mozdev.org MozillaZine.org Hosted by:
WebAIM.org
Copyright © 1999-2006 XULPlanet.com