由於之前的項目決定在Linux上運行Mozilla平臺,最後基於Mozilla開發基本應用。所以瞭解了一些Mozilla平臺的開發。
雖然日後估計不會再用到了,當個人覺得還是很強大的一個平臺,之前也看到過一個基於這個平臺的企業應用,很不錯。依賴Mozilla實現跨平臺,並且可以用Linux+Mozilla實現個瘦客戶端。
小記如下:
firefox 定製 一種是通過userChrome.css進行定製,可修改見面樣式,還可以通過樣式使某部分不顯示 perf.js 是軟件的默認配置,可以修改一些配置選項 另一種直接修改firefox源碼,firefox完全通過xul和js編寫的,所以修改firefox目錄下的chrome/browser.jar文件 firefox 擴展 firefox擴展的一般目錄結構 ext/ chrome/ content/ main.xul #按照chrome.manifest中的設定,存放相應的界面xul,js腳本之類的資源 chrome.manifest #chrome方式資源定位的描述文件,定義瞭如何通過chrome資源定位訪問到指定文件 install.rdf #描述擴展,如作者,廠商,版本,擴展的類型(有主題,程序),要求的firefox版本 當開發完成之後,就可以將ext整個目錄用zip打包,修改擴展名爲xpi,就可以讓firefox安裝使用了。 main.xul 是用來描述界面的xul,使用xml語言,其中也可以嵌入js腳本 *.js 主要的程序邏輯功能還是放入js文件當中,然後在main.xul中進行引用 chrome.manifest 可描述多種類型如:content, overlay, locale content: 資源文件 overlay: 覆蓋原有某部分內容,如覆蓋firefox瀏覽器的狀態欄,添加擴展所需的內容。 locale: 國際化資源的定位 國際化 採用xml的方式進行國際化。 首先需要在chrome.manifest當中,指定locale資源位置,然後通過*.dtd和.properties文件讀取本地化的文本 在xul中引用的國際化文本,使用dtd文件 在程序中,如js腳本中引用國際化文本,使用properties文件 mozilla 平臺開發 firefox和thunderbird等應用程序,全是基於mozilla平臺進行開發的。mozilla平臺主要使用xul,xpcom,npruntime等方式進行開發。 xpcom和npruntime都是對mozilla平臺的進行擴展,通過這兩種方式可以使用c/c++訪問系統資源,向mozilla程序提供接口。 xpcom組件趨向於被npruntime取代。 還可以使用Mozilla embedding APIs將mozilla組件內嵌入其他應用程序當中。 mozilla 應用程序 一般目錄結構如下: app/ chrome/ content/ main.xul locale/ #國際化資源存放位置 en-US/ chrome.manifest #同樣是chrome資源定義 defaults/ preferences/ prefs.js #應用程序默認配置,修改xulrunner的默認配置 extensions/ application.ini #應用程序配置描述,作者,mozilla要求版本等 應用程序與firefox擴展目錄結構基本相同,因爲firefox就是基於mozilla平臺開發,擴展機制也同樣是利用mozilla平臺提供的。 應用程序使用xulrunner運行: xulrunner application.ini xpcom 組件: 通過開發xpcom組件,給於應用程序訪問系統資源的方法,以及其他用來擴展xulrunner應用程序的功能。 *.idl 描述接口,所有接口都繼承自nsISupports,描述中還需要uuid,用來唯一標識這個接口,使用uuidgen程序生成。 xpidl 程序可以通過idl文件生成,c++頭文件和實現文件,還有xpt文件 *.xpt 是接口的二進制描述文件。提供xulrunner訪問接口的速度。 *Module.* 是用來實現Module的接口,以讓xulrunner調用該組件 通過NS_IMPL_NSGETMODULE和nsModuleComponentInfo結構,告知xulrunner,組件對象的註冊。 組件安裝 最終將生成*.so和xpt文件放入xulrunner/components目錄下,如果存在components.list文件,則需要添加文件。 組件是否註冊會在應用程序的用戶配置目錄下生成compreg.dat文件 !!當出現註冊不上時,可嘗試刪除compreg.dat文件!! 使用xpcom組件: var c = Components.classes["@ccoss.com/desktop;1"].createInstance(); //獲得組件實例 c = c.QueryInterface(Components.interfaces.nsICcoss); //要使用的接口,因此一個組件可以實現多個接口