Main menu:

Site search

Categories

Archive

Firefox,个性的自由释放!

来自一位清华大学同学的Firefox扩展编写手记

我对Firefox的使用体验可以说是比较早了,记得那时候Firefox还是1.0版本。当时最吸引我的是多页签浏览、非IE内核以及短小精悍的安装包,这让我这个喜欢尝试各种软件的人兴奋不已。随后一直从1.52.03.0Beta用过来,中间还试用过Firefox的一些扩展版本如Flock Foxplus,丰富的插件让我惊喜不已,也折射出Firefox的强大。每次Firefox版本的更新,总会看到Firefox带给我们更完美的用户体验。

网页浏览器现在已经成了我们上网必不可少的工具,追求快捷与个性是很多用户的需求。编写浏览器扩展成了是实现需求的快捷通道。在上学期用教育网的过程中,往往需要上一些国外一些大学和研究机构网站上查找相关文献资料,然而教育网能上的国外站点不多。找出国代理是一件非常头疼的事情,往往花80%的时间找到一个可用的代理,使用代理来阅读资料的时间却只有几分钟;同时大多数代理都是不稳定的,下次有需要查找国外网站资料的时候,以前用过的代理往往不能用了,一切又得重来,这样浪费时间不少;而且使用代理往往有很多限制,比如使用常见的Http代理后进行web浏览时,可能会修改Http头中的HTTP Referer等信息;一些大的搜索引擎如Google会检测到可能是来自软件的自动请求,让输入一个CAPTCHA验证码,这样严重影响了查找、浏览效率。后来发现了一些在线代理,使用起来非常方便,克服了上面的一个特点,因为在线代理不会更改代理设置,而且Google 有个为手机优化的页面,速度还比较快,实际上对我来说就是一个好用的在线代理了。而我用代理的时候通常只关心网页的内容如文字,对其排版到不在乎,然而如果每天用几十次的话,即使把在线代理网址放到收藏夹,每次拷贝目的网址,打开Google“代理网址,粘贴、查询,也很费时。于是在0711月份左右,我花了一点时间用编写过一个IE的插件,在网页链接上加了个右键选项,这样方便多了。

早在寒假之前,有关清华大学“火狐杯”软件设计大赛的宣传已经开始。由于课程繁重,期末考试非常多,我并没有在意。开学之后,“火狐杯”大赛相关的宣传更是如火如荼进行,其中有一个内容是编写火狐扩展、插件或主题包。这引起了我的注意,何不在Firefox也实现这个功能的扩展呢?

于是我马上开始查找相关的资料,由于错过了之前火狐工程师在清华的交流与演讲,只好从零开始编写扩展。刚开始的时候,编码过程也相当原始——知道扩展就是一个压缩包后,直接把一些扩展解压出来看,研究扩展代码的结构。

在看代码的过程中发现,跟其它浏览器的插件不同,Firefox的扩展实在是太友好了和灵活了!

Firefox的友好之处在于几乎所有的代码都是可以看源码的(当然如果用到XPCOM等除外),比如界面部分用的是XUL,逻辑部分用的是JavaScript,自然都是明文编码,马上就可以解释执行,连国际化之类的都有相关的接口,只要按照目录结构写好,压缩就可以发布了!

随着编码的深入,不得不佩服Firefox架构的灵活。

在编写扩展的过程中,发现Firefox本身就是一个非常丰富的资源,我要写的扩展是网页右键相关的,需要调用的很多接口在browser.jar 里面都可以找到,这应该是最权威的写法了。这好像又回到了我以前写Delphi程序的时候,由于VCL架构的代码都是可以看源码的,很多好的编程习惯和规范都可以从其源码里面学习一样。我一直非常佩服的Danny Thrope也曾经做过Firefox引擎的开发,更是对Firefox增加了好感。

这学期的课程仍然不轻松,我在上课和作业的间隙连续挤出时间来编写这个扩展,终于赶在3.13号“火狐杯”大赛截至之前提交了这个扩展。23号得知过了初赛,而且Mozilla的工程师、科协的同学,还有网上的用户给予我很多鼓励,更增添了我完善该扩展的热情。就在线代理本身而言,与传统代理相比还是有相当大的局限的,比如大部分都不能post表单,速度也不一定很快,常规代理虽然难找,但是找到后就比较方便了。我写的扩展中只有一个在线代理实在是太简陋了。

于是接下来我几乎把所有流行的Firefox代理工具下载下来试用,如FoxyProxySwitchProxyPHProxy Gladder已经做得相当好了。比如FoxyProxy非常强大,配置非常周到详尽,SwitchProxy切换代理非常方便。但是就我切身体会而言,要是综合所有代理的优点就好了,比如FoxyProxy非常强大,但是配置复杂,可新用户往往不知道如何下手试用,SwitchProxy切换代理非常方便,,但是它不能使用在线代理J(要知道常规代理非常不稳定,而且速度有差别,在代理间切换几乎是经常的操作),Gladder 集成了在线代理,自动功能很强大,更新也比较快,不需要用户参与就把在线代理网址切换过去了,但是有些时候用户可能主动来选择是去使用代理,在不使用代理的时候,占用系统资源尽量少,而自动功能会增加系统开销,对于很多希望插件占用系统资源少的用户来说可能不愿意,而且自动检测带来的编程调试复杂性也很大。

总之,代理这一块还是有文章可以做的。

快速切换代理这一块,花刺代理已经做得相当好了,它在代理验证上也非常灵活和快捷。另外在代理逻辑控制上,各大浏览器都支持PAC脚本。临近决赛时间也不是很多,于是便加入了利用花刺代理来快速切换代理,同时完善了以前的在线代理,比如多个在线代理管理,切换,链接来源可以不仅仅从网页中的链接,还可以来自选中或系统剪贴板中的符合协议的文本,对于一段链接,如果其中包含空格,也可以过滤掉,对于喜欢简约风格的用户来说,可以设置菜单是否隐藏,另外菜单中加入用所有代理同时打开可以变相测速等。总之,尽量改善用户体验,终于在决赛演示之前做好了程序和文档。

回头看开发Firefox扩展的编写过程,这是我所有软件开发中做得相对较快的。

Mozilla的开放、共享、自由与创新真是一个非常好的理念,让我这样一个对JavaScript脚本只是稍微熟悉、XUL界面设计从零开始的新手也能很快上手,写出一个有意义的扩展或插件来,真是一件快乐的事情。这其中得益于开源、共享的便利。正如谋智中国区总裁宫力博士所说的,实际上目前80%代码都是在商业化之外的,如果不共享出来的话,就非常可惜了。我觉得更重要的事情是,开放源码让代码的每个细节都有人来精心雕刻成为了可能,而新手吸收很多优秀代码的思想,提高自身代码的质量,不重走弯路。设计人员将更多的精力放在架构设计和用户体验上,只有这样才能将一粒粒精致的珍珠串成美丽的项链。

期待Firefox3.0正式版的时候能给我们更多的惊喜。

火狐,加油!

附:

推荐一些Firefox扩展:

可以说Firefox工程师、开源爱好者将Firefox的核心引擎优化好,做稳定,加上广大爱好者编写出丰富的扩展和插件,就会给广大用户最完美的用户体验。

GreaseMonkey

当网页内容被浏览器接收到的时候,内容的展现形式就完全在你的控制之下了,发挥你的想像,就可以将网页变得符合你的用途而不必烦扰网站管理员。另外GreaseMonkey又是一个脚本接口,在此基础上可以进行再进行二次开发,真是没有做不到,只有想不到,我常用的GreaseMonkey脚本有

Pagerization——让你用Google搜索的时候,无需翻页,

AutoLoginJ ——自动登陆,上清华大学网络学堂,图书馆非常有用。

Del.icio.us Sort ——可以对Del.icio.us的某个你关注的tag进行按收藏人数排序

userscripts.org上可以找到很多~

ChmReader

既然Firefox跨平台,自然Linux下面的chm阅读工具也顺便解决了,另外支持多tab打开,加入到书签,可比hh.exe的书签好多了。

Firebug

对于做前端开发设计人员来说,这个是调试脚本的有力工具,就个人感觉而言比之前的venkman还好用一些。就在昨天,Opera也发布了Dragonfly alpha版本,看来是要和Firefox等浏览器争取web开发人员用户了。

(附:本文作者为“火狐杯”清华大学软件设计大赛“火狐潜力奖”得主)

了解“火狐杯”清华软件设计大赛:

http://blog.mozilla.com/chinacampus/2008/04/17/

%e6%b8%85%e5%8d%8e%e5%a4%a7%e5%ad%a6%e2%80%

9c%e7%81%ab%e7%8b%90%e6%9d%af%e2%80%9d%e8%bd%

af%e4%bb%b6%e8%ae%be%e8%ae%a1%e5%a4%a7%e8%b5%9b%

e6%b4%bb%e5%8a%a8%e6%80%bb%e7%bb%93/

Write a comment