2008年8月17日星期日

浅谈Gecko关键部分之十三Xulrunner

Gecko内核作为一个浏览器内核,为了能充分利用其已有的功能,Mozilla提供了一个可作为运行环境平台的Xulrunner,来扩展Gecko内核的应用。那么究竟什么是Xulrunner、如何实现一个Xulrunner应用程序、它和Firefox、ThunderBird等有什么区别、目前有哪些应用基于Xulrunner等等,通过下面的学习研究,希望能逐步的解答这些疑问。

一、什么是Xulrunner?
XULRunner is a Mozilla runtime package that can be used to bootstrap XUL+XPCOM applications that are as rich as Firefox and Thunderbird. It will provide mechanisms for installing, upgrading, and uninstalling these applications. XULRunner will also provide libxul, a solution which allows the embedding of Mozilla technologies in other projects and products.

其实质上是一个运行环境,类似于java虚拟机、Adobe AIR、Yahoo! Widget等,只不过它目前支持xul、xpcom、js、html等,而其他的运行环境大都有其对应的支持格式及实现方式等。有了Xulrunner,为开发Rich Internet application提供另一种实现方式。

Xulrunner基于Gecko内核,充分利用了其功能及实现方式,而Gecko内核的功能、性能及实现方式等在Firefox中得到了充分的体现与运用。这样Xulrunner应用程序基本上完全可以应用Firefox所拥有的功能。

二、如何实现一个Xulrunner应用程序
1、下载、安装Xulrunner;

2、创建应用目录结构,设置应用application.ini及chrome manifest;
application.ini内容大致如下:
[App]
Vendor=***
Name=Bamboo
Version=1.0
BuildID=2008052906
Copyright=Copyright (c) 1998 - 2008 mozilla.org
ID={ec6039f7-c60a-784f-9b0e-23b3a9e67323}
[Gecko]
MinVersion=1.9
MaxVersion=1.9
[XRE]
EnableProfileMigrator=1
EnableExtensionManager=1
[Crash Reporter]
Enabled=1
ServerURL=https://crash-reports.mozilla.com/submit

其中ID表示xulrunner应用的唯一ID,在编写extension时须指定该extension能够应用的目标程序,在其install.rdf的targetApplication项的ID中指定已知的应用ID(也即xulrunner应用在其application.ini中指定的ID)。如Firefox的应用ID为{ec8030f7-c20a-464f-9b0e-13a3a9e97384}。

3、创建xul、js文件;

4、设置应用选项;
在pref.js中指定Xulrunner应用程序启动的主窗口,如
pref("toolkit.defaultChromeURI", "chrome://myapp/content/main.xul");

5、运行Xulrunner应用程序;
.\xulrunner\xulrunner.exe application.ini

具体参考
Getting Started with XULRunner


三、Xulrunner和Firefox、ThunderBird等有什么区别?
Xulrunner作为一个运行环境,以供他人开发基于Xulrunner、基于Gecko内核的应用程序,从Gecko1.9以后,从严格的意义来讲,Firefox、ThunderBird等是基于Xulrunner而开发的,也是一个Xulrunner应用,只不过它得到Mozilla官方的支持,它是浏览器。

Mozilla在开发Firefox、Xulrunner、Gecko内核的过程中,不断的相互扩充,相互优化,相互促进,往往一个Firefox主要版本都对应一个Xulrunner版本,Xulrunner、Firefox对某一特性的支持程度有时有一些略微不一致,往往是由于对应版本未及时更新而造成的。

自Firefox3.0以来,通过firefox.exe -app application.ini的调用方式同样可以运行一个Xulrunner应用,只不过此时该Xulrunner应用的Gecko内核是当前Firefox对应Gecko内核。

到目前为止不同组织开发了许多基于Xulrunner的应用,如比较著名的有Songbird、Joost、Miro等等。

具体可参考
XULRunner Hall of Fame

四、开发Xulrunner应用程序与Embedding Gecko有什么不同?
以基于Xulrunner的方式开发应用,可以充分利用Gecko内核的所有功能(包括xul、xpcom、js等等),入手比较简单,对开发者而言,只须专注实现自身所关心的部分,但要想真正开发出好的应用,需要对Gecko内核的方方面面拥有较深入的理解,难度较大,虽然其符合许多W3C标准,但Gecko内核的各个方面都自成一个体系(特别是xpcom),与其他的库及开发平台的接口相对较少。同时Mozilla目前也推荐开发人员以运行平台的方式来利用Gecko内核。

通过Embedding Gecko的方式来利用Gecko内核,其实现方式和可利用的外部库等都比较灵活,不一定只限于与Gecko相关的实现方式或外部动态库,其往往将Gecko内核作为一个相对独立的外部库使用,但由于目前Gecko内核在Embedding方面的接口有限,不能让外部程序充分利用Gecko内核的功能,从而限制了外部程序对其利用,同时如只利用Gecko内核中浏览页面的部分功能,而需要嵌入整个Gecko内核,有点得不偿失。

究竟是使用Xulrunner的方式还是使用Embedding Gecko的方式来利用Gecko内核?
这就存在一个取舍的问题,如只须嵌入浏览页面的功能,嵌入IE内核或Webkit内核,肯定方便很多,嵌入Gecko内核,稍现复杂,但嵌入的功能都相对有限;想更进一步了解嵌入Gecko内核的内容,可参考浅谈Gecko关键部分之十二Embedding一节。

如使用Xulrunner的方式来利用Gecko内核,则须完全拥抱Xulrunner平台,可利用的功能丰富强大,需要学习研究的难度曲线较大,但是Mozilla毕竟是一个开源组织,其是否能提供一个高质量的可商用的运行环境,存在一定风险,有可能没有Microsoft、Adobe等商业公司提供的平台那样得到更广泛的支持。虽然如此,但其开放程度及对Web技术趋势的创新是独一无二的,再说目前其提供的文档越来越规范,应用越来越多。

五、总结
总的说来,如想真正深入的了解Web技术或浏览器,使用Xulrunner是个非常好的选择,但代价可能较高,如一旦真正掌握,则至少Web技术实力会很强;

如只是利用Web技术或浏览器,完全可抛开Gecko内核,利用IE内核或Webkit内核,来运用Web技术,但对Web技术的真正把握可能不是很深入;

作为一个开源爱好者,想更深入了解Web技术或浏览器,作手学习研究使用Firefox、Xulrunner等Gecko内核相关应用程序,是个不错的选择,因为它提供了很多非常不错的Web技术及工具如ajax、firebug、xul、venkman等;经过一定时间的运用,一定会收获颇多!

六、参考资源
Mozilla Developer center -XULRunner
Wiki XULRunner
What XULRunner Provides
XULRunner FAQ

没有评论: