2007年7月31日星期二

Firefox扩展开发

           最近主要做Firefox插件的开发,决定把每天的工作情况写下来,希望对其他有需要的同人有所帮助了。
         要搞这个冬冬最起码要掌握以下几门技术,XUL用来开发界面的,JavaScript用来做事件处理的,CSS用来做样式单的,DOM用来操作节点的,原 本打算也研究一下XPCOM的,但是老板说时间紧,任务重,所以就先把这个pass过去了。这几样技术单独看虽然都不是很复杂,但是绞和在一起真是可以把 人折磨死。
        先说JavaScript吧,这个东西一开始看也没觉着什么,类定义的不多,所以没什么库需要学的,但实际开发的时候,才发现类定义少了会更郁闷,想用个 什么都要自己动手,实在是类,然后变量引用,名字空间,运行上下文,prototype chain,一堆东西把人搞到云里雾里的。之前搞Java那套,放在这还真不太适用,感觉要重头再来一样,挫折啊,郁闷啊。有的时候为了省事,想拿别人的 库来用吧,才发现AJAX不但带旺了互联网,还搞红了JavaScript,一堆框架prototype,dojo...让你学的不亦乐乎。
 
          开发插件实在是很痛苦的一件事情,因为他需要用到Firefox的chrome系统,而每次更新了代码之后,都需要重新载入chrome才能起作用。 一般情况下要重启chrome就需要重新启动firefox,还好有人已经发现这种痛苦,所以开发了一个Extension Developer Manager,里面提供了好几个工具,用的最多的是reload chrome,用来在不重启firefox的情况下,重新载入chrome,第二个是javascript shell,他可以访问任意一个当前的firefox窗口。而要完成插件开发,一般还要用到Console,因为很多调试信息都需要通过这看,如果没这玩 意,那估计每次都得用alert了。至于DOM Inspector一般用不上,因为如果你要象greesemonkey那样,获取当前页面的HTML DOM的话,一般都只能通过事件来实现,然后hack到她的appcontent里面,这东西在DOM Inspector里面没有,所以,你通过这种方式修改了DOM树,通过DOM Inspector是看不出来的,而为了验证你有没有修改成功,现在我的方法就是靠javascript shell。
        关于DOM,我搞了足足两天,才算搞出个所以然来,由于firefox是用XUL写的,而XUL也定义了DOM,所以,一般情况下你在扩展里头,或者 javascript shell里面通过document获取的仅仅是XUL的DOM,要获取browser里面的DOM,我现在探索出来的有两种,一种是 greesemonkey那样,用事件,每次都监察DOMContentLoad事件,这个方法很危险,例如如果一个网页他有多个frame,那么这个事 件就会发生多次,而由于greesemonkey只是在加载的时候用user script对DOM做一次处理,所以这个问题不是特别大。不过,如果我要做的是能够多次操作DOM树,所以,就必须要得到当前窗口的当前正在显示的 DOM,为了获取这冬冬,我足足用了2天,google了所有能想到的关键词,把XUL planet和MDC上面的文章都翻了个遍,最后终于在moznet的irc上面问到人了,原来要得到这东西根本不需要用事件,只要通过 content.document就可以得到了。实在不容易啊。
 
        javasript是灵活的,但是在原始的javascript上裸开发的 好像比较少,一般大家都会选择某个库进行。js方面的lib,一开始比较有名的应该是prototype,网上关于这个的介绍和讨论也很多,但是现在好像 大家用这个的也比较少了,因为prototype大量的修改了javascript的基础类,所以对javascipt的名字空间的污染比较大,很容易发 生名字空间方面的冲突。后续的lib大都吸取了这方面的教训,一般把自己的方法和类定义在一个单一的名字空间下,不过这样带来的另外一个问题是,这些 lib更多时候象一个toolkit,当需要某些功能时,就调用这些toolkit中的功能类,因此,面向对象的特性不太明显。
        对于这些lib,现在我用的比较多的是dojo,因为他提供了比较类似于java的语法,所以,用起来比较顺手。不过用在extension里面开发时也 会遇到一些问题,因为dojo在设计的时候是针对html的dom的,但是扩展使用的是xul的dom,虽然两者之间有很多的相似之处,但是毕竟不太一 样,因此要把dojo引入扩展当中,还需要对dojo的源代码进行修改。


--
海阔天空,做什么就记什么。主要是 Ubuntu Linux 和 Latex 及编程相关的东东: http://hai-kuo.blogspot.com/ 



劲 爆 150 万 同 时 在 线,众 人 追 捧 梦 幻 西 游

没有评论: