2008年8月2日星期六

浅谈Gecko关键部分之十一Extension

Extension扩展或称Add-on外挂这些日子随着Firefox3的发布,逐步走入人们的视野,并且有些Extension确实赋有强大的功能,其中不乏有google、yahoo!等这样的大公司打造,甚至有人由此提出Firefox3掀起新的浏览器开发应用模式。那究竟什么是Extension?如何编写Extension?编写Extension需要哪些知识?它与plugin、xpcom等开发有什么不一样?为了解答心中疑问,下面分别就这些问题予以学习研究探讨。

一、什么是Extension?
Extensions add new functionality to Mozilla applications such as Firefox and Thunderbird. They can add anything from a toolbar button to a completely new feature. They allow the application to be customized to fit the personal needs of each user if they need additional features, while keeping the applications small to download.

它从小方面看,其实就是为Firefox等添加一些小的功能,如在菜单栏、地址栏、状态栏等添加一些小的按钮以扩展功能,有些类似于为IE等浏览器的工具栏、菜单栏等添加新的选项。

但从本质上看由于Gecko内核提供了xul、xpinstall、xpconnect、javascript、xpcom、rdf等相关技术,使得可通过extension的方式几乎可以扩展浏览器方方面面的内容(这一点完全可从Firfox Add-ons繁多种类的extension中窥见其一班),更为特别的是整个浏览器Firefox本身几乎就是通过extension方式来实现的,完全超越了传统的扩展IE等浏览器的方式,同时gecko内核提供了包括extension资源标识、卸载安装等一系列支持,以便快速便捷为浏览器开发extension。

Gecko内核有这种对extension全方位的支持,仅此就完全超越了opera、safari、ie等传统浏览器内核,进而开拓出一种新的RIA(Rich Internet Application,富互联网应用系统)应用方式,虽然没有象microsoft、adobe等公司对xaml、flex那样的商业支持,但Gecko内核在RIA应用开发方面的技术研究、实现方式探索、还有开放方面等,都是首屈一指的。


二、如何编写Extension?
编写一个简单的Extension其实非常的简单,参考Building an extension一步一步的来设定extension资源标识rdf文件、chrome及manifest等包固定目录结构、编写js及xul文件、打包发布即可。

其中较为关键的在于xul文件中对xul标签overlay的使用,简单来的说来就是extension想在firefox浏览器的菜单栏或状态栏等什么位置添加上你的extension内容。具体对xul标签overlay的使用可参考XUL overlays

尽管js文件在xul文件中可以加载,但是extension作为对firefox浏览器的扩展,这些overlay xul文件,一般也是在浏览器主窗口文件browser.xul加载时一块加载的。这样如果你的extension有一些初始化的需求,只须在js文件中添加window.addeventlistener('load', initfunc,false)即可。

三、编写Extension需要哪些知识?
编写一个简单的extension需要的知识似乎不要太多,但是编写出一个切实可用的extension,必须对以下方面下番功夫不可。

首先 对Firefox本身的实现需要有一定的认识,如对browser.xul、browser.js的了解等,了解extension的运作机制如什么时候启动extension、如何响应用户事件等。

其次 对xul、html、js、xpconnect需要有基本的认识,了解extension的基本构成元素,进而了解Gecko内核为extension提供的可用资源,同时重点关注自身extension所涉及的相关内容如xpcom组件、plugin、css、dom等等。

最后 充分利用已有工具如venkman、dom inspect、firebug、xpcomviewer等以提供开发效率。


四、extension与plugin、xpcom等的区别
extension作为一种对浏览器的扩展机制,而不是对Gecko内核的扩展机制,而plugin、xpcom往往扩展Gecko内核的基础内容,可看成是对Gecko内核的扩展。其中plugin的扩展往往与页面上某一块区域内容显示相关,而xpcom往往扩展Gecko内核基本组件等。

为了扩展浏览器应用(浏览器其实只是Gecko内核应用的一个典型代表),extension则完全可以使用Gecko内核提供的各种机制及技术,同时其本身也可扩展Gecko内核如提供独立的plugin、xpcom组件来扩展浏览器应用。这样说来extension开发,也可包括plugin、xpcom等等方面的开发,就看你所扩展的应用需求啦。

五、总结
Firfox Add-ons中提供了种类繁多的extensions给大家使用,其中不免有令人耳目一新的东西,令人感慨万千,进而发出互联网应用竟然可以这样的感慨。有了对extension的认识,我们就可以着手阅读他人所写的extension,更深入的了解Gecko内核,编写自己的extension,挖掘属于自己的互联网应用。

总之对Gecko内核了解得越深,编写起extension来就越得心应手,其实写这一系列浅谈Gecko的文章也就是为了了解Gecko内核,能编写extension,进而开拓属于自己的Gecko内核应用、互联网应用。

六、目前所关注的Firefox extensions
Dom Inspector
Firebug
Venkman
Xpcomviewer
IE Tab
Split Browser

Weave //有空可用用Mozilla主推的在线共享书签等
PicLens //一个超酷的3D在线图片、视频管理
HttpFox//一个很好的http分析
Gladder//一个蛮好用的代理
Extension Developer
Delicious

DownloadHelper//可从多个站点下载视频和图片
Feed Sidebar //显示实时书签
。。。。。。。。。。

七、参考资源
Mozilla developer center -Extensions
Building An extension
Extension Frequently Asked Questions
Setting up extension development environment
Code snippets

Mozilla developer center-XUL Overlays
XUL Tutorial:Overlays

WIKI Firefox extensions(Add-on)
WIKI List of Firefox extensions

没有评论: