近期计划研究下Firefox的扩展机制,从扩展开发和扩展机制(源码分析)两个角度来进行,希望通过一系列的文章将这个过程和收获呈现出来。
需要说明的是,在firefox中,扩展和插件是两个概念。扩展是对现有功能的增强,或者提供一些新的功能,能否增加扩展,在哪里增加扩展,取决于firefox是否提供可扩展的能力(也就是overlay-point,这个概念后面再详细讨论)。
而插件更多的是和MIME type绑定在一起,firefox会为每个MIME类型注册一个处理模块,当浏览器遇见一个MIME对象时,会查找对应的处理模块,为此对象提供支持。比如你可以新增一个新的.new的MIME类型的对象,然后实现一个插件来处理这个类型的对象,并这种对应关系注册到firefox中,那么当firefox遇见一个.new类型的对象时,就会调用你的插件。
首先,在开始扩展开发之前,需要对我们的firefox稍作配置,使其对开发者更加友好一些,步骤不多,仅仅三步。
一、以一个独立的profile启动filefox
为什么需要独立的Profile?
Firefox以Profile为单位来管理扩展、插件和浏览器设置,在开发时,为了获取更多Firefox运行时的细节,方便开发和调试,我们需要对Firefox做一些修改,这些修改在使得Firefox对开发者更加友好的同时,也降低了Firefox的运行效率。为了正常的网页浏览场景不受到这些修改的干扰,使用独立的Profile将不同的使用场景分隔来开显然是个不错的选择。
如何使用独立的Profile?
点击开始 - 运行输入
"%ProgramFiles%/Mozilla Firefox/firefox.exe" -no-remote -P dev
最后的dev指定了用来启动firefox的profile
如果dev这个profile不存在的话,会弹出profile管理器,在其中新建一个名为“dev”的profile即可
二、接下来修改firefox的配置
在地址栏输入“ablout:config”并回车,会显示配置信息。请新建(点击右键新建)如下几个bool型的配置字段:
javascript.options.showInConsole = true 在console窗口中显示错误信息
nglayout.debug.disable_xul_cache = true 使得XUL的修改可以立即生效(不需要重启,只需要重新加载XUL文件)
browser.dom.window.dump.enabled = true 使得dump语句生效。dump语句用来向console窗口输出信息。
javascript.options.strict = true 在console中输出js的告警信息(严格的检查)
extensions.logging.enabled = true 在console中输出扩展安装和更新时的错误信息。
三、安装专为开发者准备的扩展
在地址栏输入如下URL并回车,然后安装扩展。
https://addons.mozilla.org/en-US/firefox/addon/extension-developer/
安装之后,你可以在“工具”下面找到这个扩展。这个扩展有个“Reload all Chrome”的功能,使得我们修改了插件的代码,不需要重新安装,也无需重新启动firefox,而只需要reload就可以使得修改生效。
至此,我们可以开始Firefox扩展的开发了。