我目前主要从事基于Mozilla ThunderBird邮件客户端
![](/icons/68640de.gif)
扩展开发
![](/icons/68640dou.gif)
可惜国内对于基于Mozilla平台
![](/icons/68640de.gif)
扩展开发关注度很小
![](/icons/68640dou.gif)
而且其中大部分都是做基于firefox下
![](/icons/68640de.gif)
扩展
![](/icons/68640dou2.gif)
当然不可否认
![](/icons/68640de.gif)
是
![](/icons/68640dou.gif)
其实两者区别不是很大
![](/icons/68640dou.gif)
毕竟是基于同样
![](/icons/68640de.gif)
Mozilla内核构建起来
![](/icons/68640de.gif)
![](/icons/68640dou2.gif)
以前虽然对firefox
![](/icons/68640de.gif)
扩展性有所耳闻
![](/icons/68640dou.gif)
但也只是听说而已
![](/icons/68640dou.gif)
没有任何研究
![](/icons/68640dou2.gif)
这几天对于ThunderBird
![](/icons/68640de.gif)
![](/icons/68640yi.gif)
些研究让我对Mozilla这个平台肃然起敬
![](/icons/68640dou.gif)
其UI和逻辑分离
![](/icons/68640dou.gif)
高度可扩展性
![](/icons/68640de.gif)
思想确实很棒
![](/icons/68640dou2.gif)
但由于资料稀少
![](/icons/68640dou.gif)
研究
![](/icons/68640de.gif)
人也不多
![](/icons/68640dou.gif)
造成像我
![](/icons/68640yi.gif)
样
![](/icons/68640de.gif)
新手望而却步
![](/icons/68640dou.gif)
![](/icons/68640yi.gif)
开始为了编译成功其源代码
![](/icons/68640dou.gif)
为了实现
![](/icons/68640yi.gif)
个最简单
![](/icons/68640de.gif)
“hello world”扩展都耗费了大量
![](/icons/68640de.gif)
时间和精力(我读各种各样
![](/icons/68640de.gif)
文档就花了
![](/icons/68640yi.gif)
周
![](/icons/68640de.gif)
时间了
![](/icons/68640dou.gif)
累死了)
![](/icons/68640dou.gif)
更有甚者
![](/icons/68640dou.gif)
![](/icons/68640yinwei.gif)
得不到资料方面
![](/icons/68640de.gif)
支持
![](/icons/68640dou.gif)
放弃了对这个平台
![](/icons/68640de.gif)
研究
![](/icons/68640dou2.gif)
本文
![](/icons/68640de.gif)
目
![](/icons/68640de.gif)
就是希望能为像我这样希望进入这个平台
![](/icons/68640de.gif)
新手们提供
![](/icons/68640yi.gif)
个”敲门砖“
![](/icons/68640dou2.gif)
对于Mozilla平台下
![](/icons/68640de.gif)
thunderbird和firefox
![](/icons/68640de.gif)
源代码编译问题
![](/icons/68640dou.gif)
请参考我这篇文章:
Window下编译ThunderBird源代码
Thunderbird和firefox
![](/icons/68640de.gif)
编译思路方法都是
![](/icons/68640yi.gif)
样
![](/icons/68640dou.gif)
只是参数区别而已
![](/icons/68640dou.gif)
请记住
![](/icons/68640dou.gif)
对我们来说最重要
![](/icons/68640de.gif)
是Mozilla平台
![](/icons/68640dou2.gif)
此外
![](/icons/68640dou.gif)
再介绍
![](/icons/68640yi.gif)
个优秀
![](/icons/68640de.gif)
基于Thunderbird
![](/icons/68640de.gif)
扩展--Enigmail
![](/icons/68640dou.gif)
对于我们新手来说
![](/icons/68640dou.gif)
阅读前辈
![](/icons/68640de.gif)
代码不失为
![](/icons/68640yi.gif)
个好思路方法
![](/icons/68640dou2.gif)
它
![](/icons/68640de.gif)
编译思路方法见我这篇文章:
Windows下编译Enigmail源代码
好了
![](/icons/68640dou.gif)
现在开始进入正题
![](/icons/68640dou.gif)
如何基于Mozilla平台开发
![](/icons/68640yi.gif)
个简单
![](/icons/68640de.gif)
扩展呢?先来谈谈涉及到
![](/icons/68640de.gif)
技术:
1)XUL:它是“XML化
![](/icons/68640de.gif)
用户界面语言(XML User Interface Language)”
![](/icons/68640de.gif)
缩写
![](/icons/68640dou.gif)
这是
![](/icons/68640yi.gif)
种以平台无关性为目标
![](/icons/68640dou.gif)
用来描述用户界面
![](/icons/68640de.gif)
语言
![](/icons/68640dou.gif)
现在被广泛地应用于 Mozilla 平台
![](/icons/68640dou2.gif)
再有
![](/icons/68640dou.gif)
Mozilla 本身
![](/icons/68640de.gif)
界面就是用 XUL 进行描述
![](/icons/68640de.gif)
![](/icons/68640dou2.gif)
2)CSS:它是“层叠样式表(Cascading Style Sheets)”
![](/icons/68640de.gif)
缩写
![](/icons/68640dou.gif)
这是
![](/icons/68640yi.gif)
种可以通过规则来控制 HTML/XUL/XML 等显示外观
![](/icons/68640de.gif)
语言
![](/icons/68640dou2.gif)
上述两种技术是用来负责控制
![](/icons/68640chengxu.gif)
![](/icons/68640de.gif)
界面
![](/icons/68640dou.gif)
![](/icons/68640yi.gif)
个是用来描述界面
![](/icons/68640dou.gif)
![](/icons/68640yi.gif)
个用来在被描述
![](/icons/68640de.gif)
界面上加入
![](/icons/68640yi.gif)
些界面效果(如:字体颜色
![](/icons/68640dou.gif)
是否透明
![](/icons/68640dou.gif)
边框大小等)
3)DOM:它是“文档对象模型(Document Object Model)”
![](/icons/68640de.gif)
缩写
![](/icons/68640dou.gif)
这是
![](/icons/68640yi.gif)
个允许通过脚本来动态访问和更新 HTML/XML 文档
![](/icons/68640de.gif)
内容
![](/icons/68640dou.gif)
结构和样式
![](/icons/68640de.gif)
接口
![](/icons/68640dou2.gif)
DOM 主要用来为 JavaScritp 提供
![](/icons/68640yi.gif)
个 HTML/XML
![](/icons/68640de.gif)
文档操作接口
![](/icons/68640dou.gif)
并且
![](/icons/68640dou.gif)
它也可以用来操作 CSS
![](/icons/68640dou2.gif)
由于扩展
![](/icons/68640de.gif)
界面是由 XUL 定义
![](/icons/68640de.gif)
![](/icons/68640dou.gif)
而 XUL 只是 XML
![](/icons/68640de.gif)
![](/icons/68640yi.gif)
个特殊应用
![](/icons/68640dou.gif)
所以我们也可以通过 DOM 来对扩展界面进行“动态”操作(如:按钮
![](/icons/68640de.gif)
禁止和否
![](/icons/68640dou.gif)
动态装载数据等)
![](/icons/68640dou2.gif)
同时
![](/icons/68640dou.gif)
又有许多
![](/icons/68640de.gif)
文件和数据会采用 XML 进行存储和传输
![](/icons/68640dou.gif)
所以创建和分析 XML 文档又显得尤为重要
![](/icons/68640dou2.gif)
通过 DOM 接口
![](/icons/68640dou.gif)
我们可以将
![](/icons/68640chengxu.gif)
![](/icons/68640de.gif)
逻辑处理部分和界面表现部分有机
![](/icons/68640de.gif)
结合起来
![](/icons/68640dou2.gif)
4)XPCOM:它是“跨平台组件对象模型(Cross -platform Component Object Model)”
![](/icons/68640de.gif)
缩写
![](/icons/68640dou.gif)
它很像微软
![](/icons/68640de.gif)
提出
![](/icons/68640de.gif)
组件模型技术
![](/icons/68640dou.gif)
但它是跨平台
![](/icons/68640de.gif)
![](/icons/68640dou.gif)
即其运行环境可以不依赖于某种特定
![](/icons/68640de.gif)
操作系统平台
![](/icons/68640dou2.gif)
由于 JavaScript 语言只内置了几个和本地访问无关
![](/icons/68640de.gif)
对象
![](/icons/68640dou.gif)
而对于桌面开发来说
![](/icons/68640dou.gif)
显然不能满足要求
![](/icons/68640dou2.gif)
而 XPCOM 为面向桌面
![](/icons/68640de.gif)
开发提供了这种可能
![](/icons/68640dou.gif)
并且它使开发出
![](/icons/68640de.gif)
扩展
![](/icons/68640chengxu.gif)
可以跨平台
![](/icons/68640de.gif)
运行
![](/icons/68640dou.gif)
而不用依赖于某个特殊
![](/icons/68640de.gif)
操作系统
![](/icons/68640dou2.gif)
只有使用 XPCOM
![](/icons/68640dou.gif)
我们
![](/icons/68640de.gif)
扩展才可以做出实用
![](/icons/68640de.gif)
功能
![](/icons/68640dou.gif)
没有 XPCOM
![](/icons/68640dou.gif)
本地和远程
![](/icons/68640de.gif)
资源整合可以说是不可能
![](/icons/68640dou2.gif)
虽然扩展开发是用 JavaScript 来做
![](/icons/68640de.gif)
![](/icons/68640dou.gif)
但每个封装
![](/icons/68640de.gif)
对象或
![](/icons/68640hanshu.gif)
可能都要
![](/icons/68640diaoyong.gif)
XPCOM 对象来完成特定
![](/icons/68640de.gif)
功能
![](/icons/68640dou2.gif)
5)XPConnect:
![](/icons/68640yi.gif)
种将 XPCOM 和 JavaScript 连接起来
![](/icons/68640de.gif)
技术
![](/icons/68640dou2.gif)
该技术允许组件被脚本化
![](/icons/68640dou.gif)
而且能够用 JavaScript 来进行组件
![](/icons/68640de.gif)
开发
![](/icons/68640dou2.gif)
6)XBL:它是“可扩展绑定语言 (Extensible Binding Language)”
![](/icons/68640de.gif)
缩写
![](/icons/68640dou2.gif)
7)RDF:它是“资源定义框架(Resource Definition Framework)”
![](/icons/68640de.gif)
缩写
![](/icons/68640dou2.gif)
Mozilla 使用这种文件格式来保存扩展
![](/icons/68640de.gif)
注册信息和描述信息等
![](/icons/68640dou2.gif)
8)JavaScript:使用 JavaScript 开发扩展是编程语言
![](/icons/68640de.gif)
首选
![](/icons/68640dou2.gif)
JavaScipt 是扩展开发
![](/icons/68640de.gif)
核心部分
![](/icons/68640dou.gif)
它主要用来实现
![](/icons/68640chengxu.gif)
![](/icons/68640de.gif)
业务逻辑描述
![](/icons/68640dou.gif)
起着粘合剂
![](/icons/68640yi.gif)
样
![](/icons/68640de.gif)
功能
![](/icons/68640dou2.gif)
可以说
![](/icons/68640dou.gif)
从网页下
![](/icons/68640de.gif)
JavaScript 开发到扩展下
![](/icons/68640de.gif)
JavaScript 开发
![](/icons/68640dou.gif)
是
![](/icons/68640yi.gif)
种由轻量级到重量级
![](/icons/68640de.gif)
转变
![](/icons/68640dou2.gif)
其中很多东西想必大家都熟悉
![](/icons/68640dou.gif)
可有
![](/icons/68640yi.gif)
点区别值得注意
![](/icons/68640dou.gif)
在Mozilla平台下不是用这些东西来做网页的类
![](/icons/68640de.gif)
![](/icons/68640dou.gif)
而是进行桌面开发!确切地说
![](/icons/68640dou.gif)
开发
![](/icons/68640de.gif)
扩展都是面向桌面应用
![](/icons/68640de.gif)
![](/icons/68640chengxu.gif)
![](/icons/68640dou2.gif)
对于更为详细
![](/icons/68640de.gif)
介绍
![](/icons/68640dou.gif)
请参阅基于 Mozilla
![](/icons/68640de.gif)
扩展开发
![](/icons/68640dou.gif)
可以说这篇文章是目前国内对Mozilla平台最为出色
![](/icons/68640de.gif)
技术文章了
![](/icons/68640dou.gif)
值得我们好好研究
![](/icons/68640dou2.gif)
我这里也是大部分结合他这篇文章在thunderbird上完成开发
![](/icons/68640de.gif)
![](/icons/68640dou2.gif)
作者
![](/icons/68640de.gif)
![](/icons/68640yi.gif)
篇文章
![](/icons/68640dou.gif)
却帮助了无数像我这样
![](/icons/68640de.gif)
新手
![](/icons/68640dou.gif)
在这里特别向作者Lewis Lv致敬!
好了
![](/icons/68640dou.gif)
现在我们开始进入”Hello World”
![](/icons/68640de.gif)
世界!先看看我们要实现
![](/icons/68640de.gif)
效果图
![](/icons/68640dou.gif)
就是在thunderbird
![](/icons/68640de.gif)
菜单中插入我们自定义
![](/icons/68640de.gif)
菜单项.
![](http://www.crazycoder.cn/WebFiles/20091/c44e5096-c020-4976-9f82-ec7375f8cbad.jpg)
最后当然是安装了
![](/icons/68640dou.gif)
点击thunderbird
![](/icons/68640de.gif)
“工具“—”附加软件Software“
![](/icons/68640dou.gif)
就可以从本地xpi文件安装这个”hello world”插件了.