創建一個 XUL 文件
一個 XUL 文件可以有任何名字,但它必須擁有一個 .xul 的擴展名。最簡單的 XUL 文件具有下述結構:
<?XML version="1.0"?>
<?XML-stylesheet href="Chrome://global/skin/" type="text/CSS"?>
<window
id="findfile-window"
title="查找文件"
orIEnt="horizontal"
XMLns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<!-- Other elements go here -->
</window>
這個窗口不會做任何事情,因為它沒有包含任何用戶界面元素。那些元素會在下面的部分中添加。這裡對上面的代碼進行逐行斷開解釋:
<?XML version="1.0"?>
這一行只是簡單聲明這是一個 XML 文件。你通常在每一個 xul 文件的頂端都會添加這一行,非常像在一個 HTML 文件的頂端添加 Html 的標識。
<?XML-stylesheet href="Chrome://global/skin/" type="text/CSS"?>
這一行是用來指定文件使用的樣式表的。這是 XML 文件用以導入樣式表的語法。在這種情況下,我們從一個皮膚包的全局部分導入樣式。我們沒有指定特定的文件,所以 Mozilla 會確定使用文件夾中的哪一個文件。在這種情況下,會選中最重要的 global.CSS 文件。這個文件包括了所有 XUL 元件的默認聲名。因為 XML 並不知道如何顯示元件,因此這個文件指出怎樣去做。通常,你會將這一行放在每一個 XUL 文件的頂部。你也可以采用類似語法導入其他的樣式表。需要注意的是你一般都會在你的樣式表文件中導入全局樣式表。
<window
這一行說明你在描述一個 window 。每一個用戶界面窗口都在一個單獨的文件中進行描述。這個標記非常類似 Html 中包圍全部內容的 BODY 標記。 一些屬性可以放到 window 標記中——在本例中有四個屬性。在本例中,每一個屬性都占一個單獨的行,但是不是必須這樣做。
id="findfile-window"
id 屬性用作標識以便窗口被腳本所引用。你通常會為所有的軟件放上 id 屬性。雖然名字可由你任起,但應該是有一定關聯的。
title="Find Files"
The title Attribute 屬性描述顯示時將在窗口的標題欄上顯現的文本。在本例中將顯示'查找文件'。
orIEnt="horizontal"
orIEnt 屬性確定窗口中元件的排布。值 horizontal 意味著元件應該橫過窗口水平放置。你也可以使用值 vertical,這表示元件將成一列放置。這是默認值,所以如果你希望使用垂直方向的話可以將這個屬性完全關閉。
XMLns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
這一行聲名了 XUL 的名空間,你應該將它放到窗口元件以表示它的所有子元件都是 XUL。注意這個 URL 實際上不需要下載的。Mozilla 內部會識別這個 URL。
<!-- 其他元件寫到這裡 -->
將這個注釋塊替換成其他顯示在窗口中的元件(按鈕、菜單以及其他用戶界面組件)。我們在接下面的部分將添加一些元件。
</window>
最後,我們需要在文件的結尾關閉 window 標記。
打開窗口
聲明完一個窗口,如果打開它呢?這裡有幾種方法:
如果是進行開發,你可以直接在浏覽器的定位欄(location bar)中輸入URL(chrome:、file:或其它形式的URL)。如果使用chrome則要按前面所講的注冊包。如果使用file:協議,可以直接打開。chrome的好處是可以獲得比一般URL更多的權限。不過,現在還用不上。但建議還是把Chrome配好。
如果.xul文件已經與Mozilla作了關聯,在資源管理器上雙擊即可。這種方式與file:方式效果一樣。
不過,因為我們的XUL中沒有定義其它元素,因此使用Mozilla打開時,什麼也看不到。並且在浏覽器中打開時,窗口會顯示在浏覽器中,這不是一個真正的應用,不過進行測試沒有關系。
正確的方法是使用Javascript來打開。使用window.open()函數,同打開Html文檔一樣。不過需要一個額外的參數,叫"chrome",它用來指明要打開的文檔是一個Chrome文檔。語法描述如下:
window.open(url,windowname,flags);
where the flags contains the flag "Chrome".
Example:
window.open("chrome://navigator/content/navigator.xul", "bmarks", "Chrome,width=600,height=300");
還可以在命令行下使用-Chrome參數來指明Mozilla啟動時打開的XUL文件。例如:
mozilla -chrome Chrome://findfile/content/findfile.xul
mozilla -chrome resource:/Chrome/findfile/content/findfile.xul
-chrome參數並不會帶來特殊權限,而是Chrome URL備具特殊權限。
到這裡可以把已經學過的做一個測試。包的組織不一定要是content/skin/locale這種形式。象我的測試就是:
d:projecttestxulfindfile
現在目錄下有兩個文件:
findfile.xul和contents.rdf
然後修改installed-Chrome.txt文件。
切換到Mozilla目錄,然後在命令行下輸入:
mozilla -chrome Chrome://findfile/content/filefile.xul
不過執行完後,什麼都沒有,就一個標題條。
從 "http://developer.mozilla.org/index.PHP?title=Cn/XUL_%E6%95%99%E7%A8%8B/%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E7%AA%97%E5%8F%A3" 獲取v