由于之前的项目决定在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); //要使用的接口,因此一个组件可以实现多个接口