Linux上运行Mozilla平台小记

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

相关推荐