firefox附加组件开发者指南(五)——创建一个firefox扩展(上)

本章篇幅较长,分上下两部分发布,本章中的图和清单4在原网站中没有,因此这里也没有,感兴趣的可以去原文补充。下面是译文。

至今为止,各个章节中独立的介绍了相关的技术——XUL、javascript、CSS和XPCOM。本章中,我们讨论如何将它们放到一起来实际的创建一个扩展。

注:那些对诸如netbeans、eclipse等IDE掌握得非常好的开发者的创建Firefox/thunderbird附加组件的更简单方法是使用netbeans(来自sun microsystems)和foxbeans(netbeans的扩展,由TeeSoft开发)。(译注:本人刚开始学做扩展的时候试过,foxbeans并没有随着Firefox和netbeans的更新而升级,虽然很简单的可以开发出一个Firefox的扩展,但是开发出来的扩展在较新版本的Firefox中没有很好的支持)

设置开发环境

为了以最方便的方式开发(以及测试)扩展,极力推荐对Firefox做一些变化。下面你将会看到一个如何改变的简洁描述;更详细的描述可以在设置一个扩展开发环境中找到

创建开发profile

如果你想将日常使用的Firefox浏览环境与你的开发环境分开,另外设置一个profile进行开发。创建这个dev profile用下面的参数运行Firefox:firefox.exe -no-remote -P dev
在刚开始的时候会打开profile管理器,可以在这里创建devprofile并配置其路径。

改变首选项以进行高效开发

在你开始开发扩展之前,可以对Firefox的首选项进行一些改变。这对于扩展开发来说不是必须的,但是我推荐修改一下,这样工作会更有效率。
表1:开发扩展可以设置的首选项

首选项

描述

nglayout.debug.disable_xul_cache

 (Firefox 3.5以上的版本不存在)

通常,Firefox会在读取XUL文档之后进行缓存,要加快后来的XUL文档的显示速度。禁用该缓存可以在每次需要显示的时候强制重新加载XUL文档

True

browser.dom.window.dump.enabled

(Firefox 3.5以上的版本不存在)

启用用于调试的dump方法。 对应于“JavaScript debugging methods”侧边栏。

True

javascript.options.showInConsole

(Firefox 3.5以上的版本)

在错误控制台中输出javascript错误

True

javascript.options.strict

(Firefox 3.5以上的版本)

从javascript中进行强制错误输出

True

要做这些改变,运行你的开发者profile,输入about:config到Firefox的地址栏并打开首选项窗口;找到表1中列出的首选项并双击以进行相应的设置。这些首选项有的不存在要创建则右键点击,选择”New>Boolean”,并输入名称并相应的设置其值。

安装DOM Inspector

DOM Inspector是一个可以帮助你检查HTML和XUL 的DOM树结构、javascript对象以及CSS属性等的扩展。这个对于开发扩展来说不是必须的,但有的话会更方便。从mozilla Add-ons网站上安装Firefox扩展。

可选-安装Firebug和Chromebug

Chromebug是firebug开发团队使用来开发firebug的。你可以使用它来调试Firefox控制也可以来检查学习Firefox的UI(chrome)是如何构成的。你可以在 http://getfirebug.com/wiki/index.php/Chromebug_User_Guide下载并学习更多关于chromebug。
你可以发现这个扩展也很有价值:扩展开发者:Extension Developer https://addons.mozilla.org/en-US/firefox/addon/7434

开发扩展:你需要知道些什么

让我们来探究一下chrome,为了开发扩展你需要知道chrome。

Chrome

什么是chrome?

“chrome”是用来描述所有在XUL应用程序中的GUI结构的词。比如,在Firefox浏览器窗口中,除了网页之外的显示在内容区的所有事物就是chrome。扩展也可以当做是带有chrome的XUL应用程序。

组成chrome的三类程序包

content程序包
这个程序包是用来容纳主要的XUL和javascript脚本源文件的。很多扩展由一个单独的content程序包组成。
locale程序包
这个程序包是用来容纳用于翻译的语言数据的。要使一个扩展的GUI支持多语言,则可以包含多个locale程序包,每种语言一个(locale程序包)。
skin程序包
这是用来包含用于可视化GUI元素(包括样式表和图像)的源文件的。大多数扩展只包含一个skin程序包,但是你可以包含多个skin程序包以支持GUI在不同的主题间进行改变。

Chrome URL

使用一个叫做chrome清单的文件来向Firefox注册chrome程序包并使用它们。要注册一个程序包,使用一个特殊的叫做chrome URL的URI结构来表示文件的路径。Chrome URL的结构是:chrome://%package name%/%package type%/%relative path to source file%
例如,Firefox浏览器窗口的chrome URL如下:chrome://browser/content/browser.xul
这里程序包名称是browser,文件是browser.XUL,程序包的类型是content。源文件代表以UniversalXPConnect权限通过chrome URL运行。即使它们没有保证“使用XPConnect作为本地文件”的权限,如第四章所讨论的那样,它们将可以使用XPCOM的函数(图1)。
图1:chrome程序包以及chrome的注册
Extension/
Chrome.manifest
Chrome/ #registered in the chrome
content package #Run with privileges
locale package
skin package

跨包叠加

第三章中介绍的”overlay”技术需要在XUL文档中使用xul-overlay指令说明叠加的目标。不在XUL文档中使用xul-overlay指令而强制叠加也是可能的——这叫做“跨包叠加”(图2)。事实上,你需要使用跨包叠加来将按钮或者菜单添加到Firefox浏览器窗口中。使用chrome清单来激活一个跨包叠加。
图2:激活一个跨包叠加
Normal overlay: Adding the xul-overlay instruction to the target XUL document overlays it with another XUL document
Cross-package overlay: Adding a cross manifest permits one XUL file to overlay another without any xul-overlay instruction.

结论

这是对chrome一个简单的介绍,可能还遗留了很多未回答的问题。如果你能牢记下述三点,下一节,开发一个简单的扩展,将会帮助你进一步的理解。
1. 一个扩展的GUI可以由三种程序包组成:content、locale和skin。
2. 在browser.XUL的顶部使用跨包叠加为Firefox浏览器窗口添加一个按钮或者菜单项。
3. Chrome清单所扮演的两个重要角色是:注册chrome程序包的内容,激活跨包叠加。

开发一个简单的扩展:Hello World

这一节,我们将会编写一个极为简单的仅仅显示时间的”hello world”扩展。

第一阶段:测试安装

我们的第一步将会执行一个包含向工具菜单添加新的菜单项的最少代码的测试安装(图3)。

源文件结构

首先设置你要用来组织扩展源代码的工作文件夹。这个文件夹可以随便在哪里,本教程假设它在C:\extensions\helloworld。在你的工作文件夹中创建文件夹和文件如图4.第一阶段创建的每个文件的目的在表2中解释。

图4:第一阶段使用的文件夹结构

文件名

角色

install.rdf

叫做安装清单,这给出了这个扩展的基本信息,并且是Firefox中安装该扩展所必须的

chrome.manifest

这是前面描述的chrome清单。注册程序包并激活跨包叠加。

content/overlay.xul

将会叠加到Firefox浏览器窗口的XUL文件,添加按钮,菜单项等.

content/clock.xul

content/clock.js

XUL文件在窗口中显示一个钟,javascript文件控制其操作(这些文件会在第二阶段使用)。

表2:第一阶段中文件是如何使用的

创建安装清单

用清单1中的内容写到install.rdf中:
清单1:install.rdf的内容





[email protected]

2

Hello, World!

0.1

My first extension.

Gomita

http://www.xuldev.org/helloworld/



{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
2.0
4.0.0.*




创建chrome清单

用清单2中的内容填充chrome.manifest文件
清单2:chrome.manifest文件的内容

content helloworld content/
overlay chrome://browser/content/browser.xul chrome://helloworld/content/overlay.xul

注册content程序包(content指令)
第一行,以content开头,包含了用于注册chrome的content程序包的代码。这里helloworld是一个程序包名称,content/是一个存储源文件的文件夹的相对路径。注册content程序包使得content文件夹中的overlay.xul文件能够使用chrome URL: chrome://helloworld/content/overlay.xul来访问。
XUL跨包叠加(overlay指令)
第二行,以overlay开头,包含了用来激活跨包叠加的代码,在chrome://browser/content/browser.xul中找融合点用chrome://helloworld/content/overlay.xul.叠加到Firefox浏览器窗口。
寻找融合点
下一步是寻找叠加文档将会插入其内容到基础文档中的“融合点”。关于这个有很多的方法来进行,我们使用DOM Inspector(图5)。
选择工具>DOM Inspector菜单项打开DOM Inspector。
输入chrome://browser/content/browser.XUL到顶部的URL输入区,然后点击Inspect按钮。窗口下面部分将会出现一个浏览器面板。
点击图5中标记为1和2的点;这样菜单元素(3)将会被选中。
展开3:这会露出标记为4的地方,有几个menuitem元素。Menupopup元素4包含了你将要添加新的菜单项的融合点,你可以看到它的id是menu_ToolsPopup。
浏览在这个menupopup元素内部的menuitem元素并确定你想要讲你的新元素添加到什么地方。这里,我们将其定位到数字5的地方。

图5:使用DOM Inspector寻找叠加融合点
将overlay放到浏览器窗口
现在你知道了了你的overlay的融合点,你可以创建将要插入到此处的overlay.xul文件(清单3)。在第四行,我们标记融合点为menupopup元素,5-7行,是添加新菜单项的代码,insertbefore属性决定了这个元素添加的位置。

测试安装及操作检查

我们有了最终安装hello world扩展的位置。这里采用常规的XPI类型安装会带来错误,因此我们不使用那种方式。对于开发中的源文件我们采用测试安装。
放置指示文件
首先,移动到当前活动的profile的文件夹,打开其中的extensions文件夹。在其中创建一个新的具有你用来作为hello world扩展的ID相同名称的文件[email protected]。将其内容设置为你的扩展源文件的完整路径:C:\extensions\helloworld.
清单3:overlay.xul文件的附加内容







第二阶段:添加一个显示时间的函数

在第二阶段,我们将会实现选择第一阶段中创建的hello world菜单项就显示一个带有时间窗口的功能(图6)。

图6:第二阶段创建的时钟窗口

添加事件处理函数

首先,我们为菜单项添加一个打开窗口的事件处理函数(清单4)。
清单4:事件处理函数


时钟处理函数

创建显示时钟的窗口(清单5)以及其控制函数(清单6)。我们已经在第三章中描述了dialog元素。这里,我们只想要显示一个OK按钮,因此我们将buttons属性设置为accept。在这个窗口中有一个label元素和一个textbox元素,放在一个hbox元素内部这样它们就会水平的排列。
清单5:clock.xul的内容





                    
                    

你可能感兴趣的:(mozilla,firefox,chrome,扩展,javascript,extension,netbeans)