Zeal Blog - 泽欧里
梦想 就像鸡蛋
要么孵化 要么臭掉
WWW Zeal Blog

Firefox扩展开发学习杂记

zeal 2008-05-27 18:09 于 开发/理论 , 3086 字 |  + 0 - 0   English
Made In Zeal 转载请保留原始链接:http://www.zeali.net/entry/567
标签 ( Tags ):  ,  , 

最近玩了一把Firefox的扩展开发,感觉不错。倒腾出来一个ChinaStock,有兴趣的可以瞧瞧(现在还被放在Sandbox里面,必须登录才能下载安装;同时因为被放在sandbox里面,暂时还不能被自动更新版本)。如果您愿意的话,也可以直接在本站下载安装

扩展开发中用得着的扩展(有点拗口):

Extension Developer's Extension  (xpi download / install address) 快速将扩展目录打包成xpi文件,在不重启Firefox的情况下重新载入所有扩展以及其他实用小功能。必备!如果不使用该扩展快速重载扩展的话,每次修改代码之后都必须从Firefox的菜单栏选择“退出”关闭Firefox再打开才有99%的几率保证该Chrome内容是最新修改后的,那叫一个痛苦。即使设置参数 nglayout.debug.disable_xul_cache = true ,也只是减少了修改窗口或对话框之后的重启而已。

Chrome List + Extension Manager Extended 学习其他人写的扩展总是最快入门的方法。 Chrome List 提供了扩展浏览功能,可以查看扩展安装之后存在的问题和jar包里面的源代码;Extension Manager Extended 则扩展了Firefox的扩展软件列表功能,直接显示每个扩展的ID,通过右键可以直接打开扩展存放的目录,再不需要去资源管理器找深埋在 Application Data\Mozilla\Firefox\Profiles\!@#$%^.default\extensions 里的jar包,也不需要去猜测使用UUID作为ID的扩展到底对应在哪个子目录了。

DebugLogger + Console2 DebugLogger 是 dump() 的优化版本。可以按照每个项目分别查看各自的dump信息。像 Firebug 这样的大师级扩展属于开发必备不需多讲,这个 DebugLogger 相较而言属于轻量级并且原始的调试辅助工具。配合它,至少不需要再用alert来简单粗暴了。 Console2 则是错误控制台的加强版,实现了 Firefox 3 错误控制台的一些特性。

现有HTML代码的利用:

虽然并不被鼓励,但对于更熟悉HTML语法的开发者来说, 最快捷编写扩展界面的方法是在 XUL 中引入 HTML 命名空间(为根标签增加属性 xmlns:html="http://www.w3.org/1999/xhtml"),然后给所有使用到的HTML标签添加 html: 前缀(比如 <div>...</div> 应该写成 <html:div>...</html:div>)即可。当然,因为 XUL 是基于 XML 的语言,所以所有的标签属性都应该是小写格式,并且空tag必须进行关闭。

相应的,由于上述定义方式下HTML 元素标签定义不在主命名空间内,当进行 DOM 操作的 js 代码在创建 HTML 元素的时候,也不能直接使用 createElement ,而必须使用 createElementNS 。比如 document.createElementNS("http://www.w3.org/1999/xhtml","html:div");

关于扩展ID:

每个扩展软件都必须有个唯一的标识ID,建议是使用UUID,也可以使用形如 extensionname@my.domain(必须有@符号但不必是真实的域名) 的字符串。生成UUID的方法很多:windows下可以安装微软自己提供的GUID Generator,*nix 下直接敲命令 uuidgen ,或者访问这里在线生成一个。个人觉得虽然UUID不会造成ID冲突,但 @ 形式的可读性更强一些,否则不靠前面提到的扩展帮忙要把ID跟功能对应起来还真是件费力的事情。 

扩展描述的本地化:

在 Firefox 扩展管理器中,每个扩展的名字下面都有一段简短的描述(description),这段描述来自扩展根目录下的 install.rdf 文件。将这段描述进行本地化处理的方法是在扩展目录下创建子目录 defaults/preferences ,在子目录下新建一个 js 文件 myextname.js ,包含以下内容:

pref("extensions.ReplaceWithExtensionIDHere.description", "chrome://myextname/locale/myextname.properties");

同时在 locale 语言包文件 myextname.properties 中添加一行:

extensions.ReplaceWithExtensionIDHere.description = 经过本地化的描述内容

扩展的打包发布:

如果使用 Extension Developer's Extension 提供的extension builder 进行打包,它会在build的过程中自动将chrome.manifest中的目录配置替换成jar:chrome的形式,而不需要自己来回切换不同的chrome.manifest配置。当然前提是你的扩展工作目录按照约定的结构进行组织。如果你没有把content / skin / locale 目录放在工作根目录而是放在了 chrome 子目录下的话,打包之后xpi文件会同时包含jar文件和chrome整个目录。生成xpi文件之后,到 Firefox Add-ons 的开发者工具界面进行注册/登录/上传即可。

如果代码实际是兼容Firefox的最新版本的,只是因为在install.rdf里面的em:maxVersion设置了过老的版本号而导致你发布在AMO上的扩展被认为不兼容而无法下载的话,可以登录AMO后进入开发者工具管理界面,选择相应的扩展,点击版本历史列出的版本号链接进去,就可以快速修改该版本xpi的兼容版本范围(找这个修改的地方找了N久,OrZ)。

参考文档:
This Entry was Last Modified on 2008-07-17 15:55
引用本文(TrackBack): 此功能无限期关闭ing ... 如有引用请在文中标明出处并提供超链接  
8 条评论:
- yi 于 2008-05-28 11:07
ChinaStock不能在firefox3 rc1上安装
- zeal (link) verified 于 2008-05-28 11:13
对的。用 nightly test tool 强制启用测试了一下,貌似没啥问题。不知道为什么我在本地测试即便把maxVersion改到 3.0.* 还是提示说not compatible 。等空下来再仔细读下firefox3 的release Notes。 据说在开发者工具界面可以直接修改 maxVersion 而不用重新提交新版本,但目前为止偶还没有找到这个修改的地方在哪。。不知道是不是因为还在sandbox的缘故受到很多限制。
- DT 于 2008-06-02 13:15
谢谢博主的分享!有机会互相交流下。
- sean () 于 2008-06-02 16:55
能看源代码吗?~
- zeal (link) verified 于 2008-06-02 16:58
xpi其实就是一种压缩格式。你可以直接用7zip解压,里面的content目录下的jar压缩包就是源代码。如果你把扩展安装到了Firefox的话,使用本文提到的ChromeList扩展可以很容易找到每个扩展的源代码。
- sean () 于 2008-06-02 17:48
3KS~
- Michael 于 2008-07-24 17:26
ChinaStock如果能方便地暂停某个股票的显示就更好了,比如说右键暂停,同时方便看此股票的明细
- zeal (link) verified 于 2008-07-24 17:31
to Michael:
鼠标左键单击状态栏上的ChinaStock自动切换状态(显示/禁用);
鼠标左键双击则打开股票明细窗口;
以上功能也可以通过单击鼠标右键之后出来的菜单中找到。
对于这篇日志您有什么想法?我想听听您的高见。
如果您不是没有思想的机器Spammer,请告诉我 4 + 8 =
然后任选以下两种方式之一告诉我您的身份:
1. 使用您的 OpenID
2. 使用传统留言格式
(必填) 名字
如何称呼您?
(选填) URL
在此填写您的 Blog / Homepage 的地址,我将非常乐于访问
(选填) Email
Email地址将在经过防SPAM处理后显示在页面。如果您不希望公开自己的Email,请略过此栏
并写下您的见解:
(由于需要进行SPAM过滤,如果评论提交速度慢请耐心等待)
记住我?

  如何进行评论                   当有新回复时给我发送邮件通知
除了 <b> 和 <i> 之外,其他的HTML标签都将从您的评论中去除. URL 或 Email 地址会被自动加上链接.
当您点击发表或者预览之后,系统会自动保存您此次评论的内容,以便当网络原因发表失败时直接按Ctrl-V重新粘贴上次评论内容。
注意:快捷键及自动拷贝功能仅对IE浏览器有效。
发贴统计

Tot 621/1358

日志存档
2008年
2007年
2006年
本 Blog 原创内容
遵循以下授权:

Creative Commons
(创作共用) CC

署名-非商业性
-相同方式分享
Zeal Blog 基于
Powered byPivot - 1.24.1: 'Arcee'
Pivot1.24.1
开发
Launched @
2005-04-27
 里,居也。——《说文》    里,邑也。——《尔雅》。李注:“居之邑也。”沪ICP备05024379号 Back To Home All Links Loading