2007年10月14日 星期日
Mozilla XUL Links 2007-10-14
- JavaScript 2: 现在比较一致的想法是JavaScript 2.0这一部分,计划在Adobe捐献的Tamarin上实现,目的在于获得更好的速度。
- XPCOM: 将XPCOM从Gecko中剥离出来,同时抛弃原来XPCOM实现代码中所使用的一些难看的C++宏,改用C++自己的异常处理,再加上GC功能
- Gecko: 已经确定的是3D对象、视频的支持,其他想法就多了
- 有人甚至在琢磨抛弃Gecko, 改为在Webkit上重起炉灶:
- 移动设备的改进支持本来不在Mozilla 2的考虑范围内,但最近Mozilla觉得这个比较重要了
2007年9月27日 星期四
几个不错的Thunderbird扩展
前几天在它的扩展库里面逛了一下,发现以下几个不错:
ThunderBrowse: 在Thunderbird中直接浏览网页
Tag the Bird: 给邮件添加标签
MessageFaces: 显示Face/XFace头像
Colored Diffs: 采用彩色显示补丁,并且可以转换成unified, side-by-side等几种方式显示
Quote Colors: 邮件中引用的部分采用不同的风格来显示(不过好像不能象Claws Mail那样自己定义哪些字符是引文字符,虽然常用的是'>'和'|'
XNote: TB支持给邮件添加标签(tag),但如果想添加一些注释,就得需要XNote这类扩展了。虽然很多扩展都是这个功能,但好像只有XNote可用于TB2
标签: mozilla, thunderbird
2007年9月10日 星期一
Mozilla/XUL Links 2007-09-10
- CoScripter: 一个网页自动化工具(Firefox扩展),由IBM的人折腾出来的,
- Penelope: 著名的老牌邮件客户端Eudora关闭之后,有人想将一些功能重新在Thunderbird上实现,并模拟Eudora的观感和操作方式。
- Open Komono: ActiveState公司决定将Komodo的一部分开放,成为Open Komodo项目。Planet Mozilla上不少人觉得这对XUL IDE是个不错的消息(链接1, 2)。至少,俺一直想把Komodo里面的编辑器(基于scintilla做的浏览器插件)移植到XUL Explorer上来用。
- XUL activities in France
2007年8月28日 星期二
Mozilla/XUL Links 2007-08-28
- Google Search (xul version)
- 在侧边栏打开这个地址效果不错
- IBM developerWorks : Blogs : Bring information and collaboration into the context of your daily business processes using composite applications
- 一篇blog,讲述在Lotus Notes 8 (现在是基于Eclipse的了)中如何嵌入XULRunner来显示一个XUL应用,从而形成Composite Application
- XUL Explorer 0.7
- 近来试验了一些XUL IDE的半成品,这个东西的主要长处在于可以预览XUL,而且支持简单调试。新版本0.7相对0.4改动不大,主要是为一个XUL文件可以提供一个chrome环境了(但这个功能很有用,因为一般xul文件都不是独立的,给定一个chrome环境后overlay和dtd都可以正常加载进来了,这样预览才比较接近最后的效果)。如果完全要手工编写xul以及js,我觉得Spket还不错,里面还有Firefox 1.5和2.0的XPCOM接口列表。
2007年8月26日 星期日
XUL是如何传递事件源和参数的
查了一下DOM Level 2 Event Model规范(mozilla.org上说明),发现HTML/XUL里面是传递了一个event对象来解决这个问题,这个对象有很多属性,但不是每次这个对象里面所有属性都有所用:event.target表示触发事件的对象,event.clienX是点击事件中的点击位置,event.keyCode是按键事件中的键码。
2007年8月2日 星期四
做了个xulplanet的镜像chm
首先搞定的是XULPlanet:
http://bamanzi.inlsd.org/xul/xulplanet.chm

写了一个小的Python脚本(html2hhk.py),把所有的XUL Element属性/方法、XPCOM组件/接口都搜了出来转换为CHM的索引(其实这个脚本的功能是读出HTML的title和keywords meta tag作为关键字,改一改也可以输出devhelp的keyword列表)。
这个CHM文件还有些问题:
1. 目录还没有做,至少一些大的分类得列上去吧,这个东西好像没有什么简单方法;
2. 内容部分每页左边都有一个侧栏,供导航用的,这个东西在CHM里面没有作用,得用sed什么的批量处理一下。
2007年8月1日 星期三
Google Talk in sidebar!

在网上搜索"Firefox sidebar"相关资料时,发现了这个。
- 将http://talkgadget.google.com/talkgadget/client 添加为书签,注意选中”在侧栏打开此书签“
- 点击此书签,当当!
2007年7月31日 星期二
Rich Internet Application? Rich Client?
- RIA在界面交互性上比简单的Web应用当然要强,界面表现能力也要丰富(这才所谓rich嘛)。但RIA强调“零安装”,界面和逻辑都是临时从服务器取得,已避免部署、升级方面的麻烦(从这个角度说,RIA更接近Thin Client)。但。大部分RIA技术都依托Web,在浏览器中实现(所以也常常被称为rich web application),但可能需要安装一个运行库/解释器。目前的选择大致有Ajax, XForms, Flash(Apollo, Flex或者Laszlo)、SilverLight(WPF/E),另外ActiveX和java applet好像也算。
- Eclipse整天嚷嚷的副客户端(Rich Client),似乎跟以前说的胖客户端(fat client)并没有太大的不同,要求安装很大一堆东西。只是现在大家都更加注重用户体验、模块化和快速开发。目前的选择有Eclipse RCP, WPF(XAML), Mozilla XUL, JavaFX这些。这里出现的两个趋势是尽量简化界面的生成(比如用XML等结构化文件来描述界面)和采用脚本来编写逻辑(比如XAML, XUL, JavaFX等).

其实Mozilla XUL完全满足两方面的要求,大家常用的Firefox, Thunderbird等可以类比为rich client, 而网站上直接提供XUL则就是RIA了。
例如: Mozilla Amazon Browser, 如果你把它安装为一个Firefox插件或者独立程序,它可能又算一个rich client了。
再例如htmlhelp.dotsrc.org提供的API浏览器, 左边是一个XUL编写的导航栏,比如Python, GTK+。
链接:
- wikipedia: Rich Internet Application
- IBM developerWorks: Rich Internet Application的技术选项
- Eclipse Rich Client Platform
2007年7月30日 星期一
Document Map in Firefox
在Firefox Add-ons里面搜索了一下,找到了 Document Map这个插件(screenshot),它提供类似的功能,只不过是采用sidebar来做的。
2007年7月4日 星期三
Firefox扩展实例分析: IETab (2)
IETab是这样解决这个问题的: 将这个object标签写入一个HTML文件 chrome://ietab/content/reloaded.html, Tab中加载这个网页(其实XUL里面也是可以直接采用HTML标签的,因为都是Gecko来进行显示,所以这个browser显示一个XUL或者HTML都可以)。
如果采用IETab浏览http://www.microsoft.com,对于Firefox而言这个Tab页面的URL实际 是: chrome://ietab/content/reloaded.html?url=http://www.microsoft.com。前面那个 reloaded.html这个中又有一段脚本,在window.onpageshow中将上述网址中的url参数解析出来,传给里面嵌入的IE object:
function init() {也许有朋友会问: 怎么在Firefox地址栏显示的是http://www.microsoft.com而不是前面说的那个chrome://...呢?看看ietabOverlay.js就 明白了: 它把browser的currentURI属性的获取方法给动态替换了(见 hookBrowserGetter和getCurrentIeTabURI函数),为了完备还把urlbar的value属性获取方法、browser 的sessionHistory等给替换了。这种用法以前俺倒是没有见过,算是又学了一招,不过IETab的这种做法不是很可靠,很容易失效。var m=/(\?url=)(\S+)$/.exec(document.location.href);
if(m) document.getElementById("IETab").navigate(decodeURI(m[2]));
}
window.onpageshow=function(e){if(e.persisted)window.setTimeout(init,0);}
2007年7月1日 星期日
Firefox扩展实例分析: IETab (1)
大概浏览了一下IETab扩展的文件列表,没几个文件,以为这个插件比较简单,也就是嵌入了一个IE的ActiveX进来,再处理一下对应的命令等。
但仔细琢磨一下就发现没有那么简单,怎么嵌入一个IE进去?看了这么久的XUL相关资料,都没有看到哪里讲解当“控件”不够用时应该怎么办,得改Gecko的源代码?
查看IETab发现它采用的是另外一条思路: 将IE的ActiveX控件包装成一个插件,跟Flash等插件一样,采用HTML的object标签嵌入。
跟IE里面广泛使用的ActiveX不一样,这里这种插件是采用原来netscape定义的NPAPI接口与浏览器打交道的,这个API接口是cross-browser的(倒是IE 5.5之后似乎不再支持这个API接口,你得用另一个ActiveX控件来增加NSAPI支持,这跟Firefox上的npActiveXPlugin恰好相反,后者是用NPAPI包装了一个ActiveX容器,使得ActiveX控件可以在Firefox中使用)。object id="IETab" type="application/ietab" style="width: 100%; height: 100%;"
这个npietab.dll插件对外提供了navigate(), goBack()/goForward(), refresh(), stop(), saveAs()等方法和title, url等属性(详见nsIIeTabPlugin.idl),基本上都是原来IE控件相应功能的一个包装(详见nsScriptablePeer.cpp文件),只是为了可以在Firefox中可以再访问这些接口(那么npActiveXPlugin对外提供那些接口呢?不同的ActiveX有不同的功能接口,npActiveXPlugin怎么就能通用于各个ActiveX呢?难道它目前没有提供可脚本化scriptability的能力? 没源代码就是不一样,琢磨起来比较费劲)。
2007年6月30日 星期六
ActiveState出了个Komodo Edit
估计是为了给Komodo IDE增加一些影响力,ActiveState又推出了一个Komodo Edit,是免费的,但只有代码编辑(带calltip、语法检查)和工程管理功能,没有IDE里面调试、版本管理集成、交互Shell等功能。
但这个Komodo Edit的功能点上来说,没有太大吸引力,现在有很多功能比它强的编辑器,并且不需要30多M的安装包。
我对这个东西有兴趣只是因为通过装一个来看看它是怎么通过扩展Mozilla来实现这些功能的,比如ActiveState开发了PyXPCOM,使得大家也可以采用Python来编写XPCOM Components了。
标签: mozilla
2007年5月30日 星期三
Eclipse 里面集成Mozilla

(本图片摘自Ajax Toolkit Framework Tools in Eclipse幻灯片, 作者Philippe Ombredanne)
在公司论坛上看见有人又再问有没有新版本的Eclipse,也总有热心的人共享出来,俺对这个东西不太感冒,虽然这个东西被称为RCP的热门首选,但考虑到Java程序的内存占用,俺还是觉得不太适合我们。不过还是翻了一下3.3版本的新功能说明,里面倒是有一点吸引了我(后来发现该说明不是官方的,而是来自“Eclipse在做什么"这篇网上日志):
忘了提Eclipse 3.3的又一大特性了,叫做“Moziila Everywhere”,是指在任何平台上都可以创建一个Browser控件但是使用Mozilla内核(及时该平台上没有安装Firefox)。这是怎 么实现的呢?其实很简单,它要求你必须安装一个xulrunner,后者是Mozilla的全部内核,包括Gecko布局引擎、Javascript解析 引擎、XUL解析引擎和XPCOM,其中每样东西都足够写一本书,有了这些,仅用XUL+Javascript就可以写出一个Firefox来, Eclipse洽是利用了这个特性,用Java连接XPCOM所以创建了一个Mozilla的Browser,但是没有任何行为,包括右键菜单。如果现在整个Mozilla能嵌进去,并且能够通过JavaXPCOM交互,那就非常爽了:我们的用户很期望将他们开发的工具集成起来,一直也期望我们这边能够提供一个平台,毕竟现在我们已经有数据管理这一部分了,但我们一直没有一个好的思路,Mozilla XUL/XPCOM是近期考虑的一个方向;另外一些用户又期望将平台搭建到Eclipse平台,毕竟现在这上面的东西已经有非常多了,可以很好地利用一下。
这 个Browser控件和缺省的Browser控件是不一样的,我们平时见到的缺省Browser控件,在Windows上用的是IE内核,在MacOSX 上用的是Safari,在Linux上。。。不知道,所以它是最最简单的浏览器,不具备任何可以定制的功能,除了显示一张HTML页面外,没有任何用处。 (你该不会想用Eclipse写一个傲游出来吧)
但是Mozilla内核的浏览器控件就不同了,它意味着如果程序员平时为Firefox 写插件的形式,也可以被应用到RCP应用程序上来,设想一下我们拥有一个RCP+xulrunner的平台吧,RCP接收Java扩展, xulrunner接收xul和javascript扩展,那我们的平台——要么叫Fireclipse,要么叫Eclifox——就所向披靡了。即使不 利用它的可扩展性,单单就是能保证在不同平台上提供对Web应用程序的一致性展现一条,就足够臭美的了,更可以用写Eclipse插件的形式来限定浏览器 的行为。。。。。。唉,刚才是不是说过一个NetBeans in Eclipse啊?把那玩意扔了吧~~
现在既然这两块能够集成到一起,那么我们这边用Mozilla XUL/XPCOM来构建,他们想用Eclipse的就用,不想用的也可以直接用XUL和XPCOM。哈哈。
BTW: 晚上试验了一下,可以将Mozilla(具体说是XUL Runner)嵌入到一个SWT程序中去,成为一个Web Browser, 但还没试验成功如何显示一个XUL界面(也许是我没搞对chrome地址)。
参考:
- 比较Eclipse与Mozilla中的COM/XPCOM Java Wrapper技术 (标题有点绕,其实是说Eclipse原来对COM的支持 vs Mozilla的JavaXPCOM 这二者)
- JavaXPCOM
- PyXPCOM: 似乎Komodo的大部分组件都是用Python来搞的
- XPCOM in Delphi 7
标签: mozilla
2007年5月27日 星期日
Mozilla XUL IDE?
但我们也不是啥都没有:
- 如何知道每个XUL element有哪些属性、哪些事件? XUL Element Reference已经有了,不过这只是文档,查起来效率也够差的。 DOM Inspector可以提供一些信息,但还不是一个好的设计工具(对比GTK+ Glade或者Delphi的Object Inspector看看);
- 如何知道目前有哪些XPCOM组件可用? 每个组件又都有哪些接口?XPCOM Component Viewer(mozilla版本, firefox版本)可以部分解决这个问题,只是目前没法看到接口中每个方法/属性的说明(好像也没有看到一个类似的reference文档);
- 如何调试程序? JavaScript Debugger和JavaScript Console倒基本可以满足需要;
- 对于网页内容部分,Web Developer够强了
- 所见即所得(WYGWYS)的UI设计器?嗯,这块还没有。
目标一致了,那就开始努力吧。今天在mozpad上看到了关于Mozilla IDE的计划:
Gather initial requirements for a Mozilla IDE. A future goal might be to form a project for specifying and then developing the IDE. This should probably be based on the work being done by Paul Rouget (Codeeditor), Alex Vincent (Verbosio) and/or Mark Finkle (XULExplorer).这三个工具都很有特色,如果把它们结合到一起(XUL Explorer现在已经把DOM Inspector和Verkman JavaScript Debugger结合进去了),前景很不错。看来Mozilla IDE离我们不远了。
2007年5月20日 星期日
Firefox扩展实例分析: Paste and Go 2(续)
mozilla里面的事件处理完全采用了生产 者-消费者(广播-观察)模型,这使得一个事件发生时(一个命令被执行,或者一个控件的某种状态发生改变),响应可以有多个。
比如这个插件里pg2-go-command和pg2-search- command两个命令是否disabled,是由被观察 (observes)的pg2-pastable-broadcaster来决定的,而这个broadcaster的状态改变又是检查cmd_paste 这个内置命令的状态来改变的,这个检查的时机是在地址栏(urlbar)的右键菜单显示或者隐藏时(见content/pasteandgo2.js):
const CmdBroadcasterId = "pg2-pastable-broadcaster";* 偏好(preference)
this.pgUrlbar = document.getElementById("urlbar");
this.pgUrlbar.addEventListener("popupshowing", pgInstallGo, false);
this.pgUrlbar.addEventListener("popuphiding", this.enableCmds, false);
this.nativePasteCmd = document.getElementById("cmd_paste");
this.cmdBroadcaster = document.getElementById(CmdBroadcasterId);
var isPasteDisabled = pgPrefsObserver.nativePasteCmd.getAttribute('disabled');
pgPrefsObserver.cmdBroadcaster.setAttribute('disabled', isPasteDisabled);
enableCmds: function(event) {
pgPrefsObserver.cmdBroadcaster.setAttribute('disabled', 'false');
}
与简单的GUI toolkit不同的是,Mozilla/XUL平台对于偏好(preference)数据考虑比较周全,比如偏好如何存储,如何处理用户设置与系统默认值,扩展如何扩充偏好项目,偏好数据改变(比如直接修改)如何让界面得到相应改变等等。
在Paste and Go 2的代码content/options.xul中, 我们还可以看到另一方面支持: 将一个偏好选项绑定到一个界面控件上,界面初始化时,可自动从偏好数据设置控件的值; 界面控件的值改变时,偏好数据也就变了,不用自己再费很多劲自己写脚本读写数据(想想我们很多时候写程序非常不情愿写个”选项“对话框,这算其中一个主要 原因)。

怎么样,很省事吧?MFC里面的DDX跟这个有点类似,但只能变量与控件值绑定这一步,缺乏将数据持久化 (persistence)功能。
标签: mozilla
Firefox扩展实例分析: Paste and Go 2
它的源代码可以直接通过网页查看: http://www.mozdev.org/source/browse/pasteandgo2/src/
* Overlay
一般而言,XUL overlay文件是个不错的入口,通过它我们可以比较容易知道这个插件扩展了哪些界面元素,然后再根据界面元素去看其对应的代码。
于是我们先看content/pasteandgo2Overlay.xul

这里定义了这个插件的stringbundle, key, command, broadcaster以及firefox特有的toolbarpalette配置。快捷键、命令这些都不是界面控件,但却是一个GUI程序所不可缺少的元素,mozilla/xul把这些功能都拆分了,可以通过overlay来添加和扩展,相当方便。
* 通过脚本动态创建界面元素
但这里没有见到右键点击地址栏时出现的那个Paste and Go菜单项,它是通过脚本content/pasteandgo2.js动态添加的(因为有个添加到"粘贴"后面还是菜单最后的选项):
function pgInstallMenuItem(e, aID, aLabel, aCommand, aAccesskey) {
item = document.createElement("menuitem");
item.setAttribute("id", aID);
item.setAttribute("label", aLabel);
item.setAttribute("command", aCommand);
item.setAttribute("accesskey", aAccesskey);
if (pgPrefsObserver.pgPlaceAtBottom) { // place at bottom
menu.appendChild(item);
} else { // else place next to paste
var items = menu.childNodes;
for (var i=items.length-1; i >= 0; i--) {
var targetCmd = items[i].getAttribute("cmd");
if(targetCmd == "cmd_paste") { // find out paste
menu.insertBefore(item, items[i+1]);
break;
}
}
}
}
这就是mozilla/xul相当方便的一个地方: 通过脚本可以动态地创建、删除界面元素或者设置它们的属性,并且代码相当简洁直观。
标签: mozilla
2007年5月18日 星期五
Mozilla的可扩展性(开篇?)
俺开始是被firefox的扩展所吸引,加上工作上也需要类似地扩展能力,于是从去年底开始看一些mozilla/xul方面的资料,慢慢地发现了xul, xbl, xpcom的魅力,于是打算系统地学习一下。
- 春节前后把Creating Applications With Mozilla这本书草草看了一遍,有了大致的了解;
- 通过limodou的学习笔记将XUL Tutorial看了一遍(英文原文在MDC和XUL Planet上都有),好在有他的帖子啊,否则RDF这个东西看英文还真头大;
- Rapid Application Development with Mozilla 是第二本关于Mozilla开发的书,曾在amazon上获得五颗星的评价(可惜作者过世了,再也没有第二版)。我看了几章,感觉细节讲得比较多,而且很多地方会用类比的方式来讲解为什么要这样设计,不是太适合初学,尤其是英文不太好的朋友很难抓住重点。这本书的PDF版本可以从这里下载到。
先概括地介绍一下mozilla/xul的扩展能力:
- 通过overlay技术可以对一个已有界面进行重新定义,这也使得对于一个界面可以先写一个框架,再用overlay来逐步细化;
- 每个窗口的界面元素也有一个DOM结构,完全可以通过脚本来操纵它,修改其属性,甚至动态地创建和删除控件;
- 可以用XBL来绑定一组XUL元素组成,对行为和风格也可以包装,更方便复用;
- 可以自己来写xpcom组件(components)来扩展一些功能,尤其是与操作系统或者外部程序交互的地方,这些控件注册后就可以在脚本中使用;甚至可以用javascript来写组件
标签: mozilla
2007年4月24日 星期二
firefox两个设置问题
0: Backspace历史记录中前一网页, Shift-Backspace后一网页
1: Backspace向上一页 Shift-Backspace向下一页
Browser.tabs.closeButtons
0: 只在激活的tab上有关闭按钮
1: 在所有tab上有关闭按钮
2: 没有关闭按钮
3: 只在最后有一个关闭按钮,用于关闭当前激活tab (firefox 1.x行为)
2006年12月27日 星期三
claws-mail vs thunderbird(3): 快捷键设置
gtk程序可以设置~/.gtkrc-2.0文件获得这个功能:
gtk-can-change-accels = 1
GNOME程序可在gconf-editor中钩选如下选项
/desktop/gnome/interface/can-change-accels
但有些应用程序(比如claws-mail)不想依赖这些设置,自己打开了这个功能:
gtk_settings_set_long_property(gtk_settings_get_default(),
"gtk-can-change-accels",
(glong)TRUE, "XProperty");
可惜thunderbird/icedove没有这个功能,也没有其它的设置快捷键的功能:-(
thunderbird vs claws-mail(2): 删除重复邮件
claws-mail/sylpheed-claws自带这个功能,但thunderbird没有。不过搜到一个Remove Duplicate Messages插件,虽然很不习惯它的"selected"表示方法,但总算可以解决问题了。
2006年12月22日 星期五
Thunderbird: 如何调整附件栏的大小
本想凭着这些日子对mozilla/xul的学习,自己来解决这个问题。地方是找到了,在chrome/messenger.jar#content/messenger/msgHdrViewOverlay.xul (还是用Total Commander搜索attachment搜到的,它可以搜索压缩包中的文件内容,并且在wine上面运行得很好)。可怎么改都不对。
没办法,还是google吧。没想到一搜"thunderbird attachementView"(后者是在xul文件里面看见的附件栏的id)就找到了: MozillaZine Knowledge Base - Attachment Pane Height
标签: mozilla
又试用了一下Thunderbird
其实几年前在家里用过一年Thunderbird,现在也忘了为什么后来没有用它了。
但Thunderbird 对于thread的支持让我决定还是用claws-mail: Thunderbird将排序和分组这搅和在一起,只有选择按thread(中文翻译为话题)排序才能再选择按排序分组,也就是说我没有办法按照常见的按 thread分组再按时间排序。"
2006年12月17日 星期日
XUL学习杂感
- 目前搞到三份教程: Rapid Application Development with Mozilla, Create Application with Mozilla, XUL Tutorial. 正在看的是中间一份;
- XPFE,GRE, XRE, XPToolkit和XULRunner是什么关系?
- 初学XUL时还是用mozilla做试验比较好,如果你写的XUL里面有错误,似乎Firefox会啥反应也没有, XULRunner亦然,但mozilla会帮你指出来。应该是某个选项控制这个;
- Mozilla是如何解决XUL里控件文本的本地化问题的?它直接使用了XML技术里面的DTD/entity,这很有些匪夷所思啊
- menupopup, popup, popupset有什么差别?
- Firefox里面的toolbar为什么没有grippy(就是原来netscape里面工具条左边的折叠条)?
2006年12月10日 星期日
Mozilla/XUL平台在哪些方面吸引我
前几天说,我想学习一下XUL了。为什么呢?
我赖以混饭吃的项目组的项目的业务层越来越复杂,用户们也不满于我们接纳和实现功能需求的速度,期望能够自己搞二次开发。为此我们在前一个版本中 全面加强了脚本扩展,以便能够方便外围业务的开发。但这只是解决了逻辑方面的问题,但缺少界面扩展能力,那怕只是提供几个选项的简单的对话框。
通过Firefox的使用,我看到了Mozilla作为一个开发平台的能力,而ThunderBird, Komodo等也说明了Mozilla不仅仅是个浏览器。所以我想学习一下XUL,如果明年能够推动迁移到这个上面来就比较有意思了,即使这个目标达不到我也期望能够从中学到很多思想。
那么,Mozilla/XUL具体在哪些方面吸引我?
- 脚本与系统完全融为一体,可以响应界面,可以创建XPCOM对象(有点遗憾的是,Python脚本支持的进展有点慢);
- 界面的快速开发功能(XUL),界面元素也相当丰富(对于我们的应用,目前还欠缺一个datagrid, 或者说可编辑的treelist),我对于还要考虑对话框怎么调整大小、分隔条的行为这些问题感到厌烦;
- 可通过XPCOM扩展系统;
- overlay机制,可以通过扩展修改核心系统的行为(也包括界面,比如在一个已有窗口中插入一些元素);
- 本身支持HTML的显示,这会给内容的展现带来很大的方便;
- 包,各个包之前是相互独立的,各有自己的名称空间,而overlay机制又允许包之间可以打交道;
- 完整而简单的多语言解决方案。多语言这个问题初看起来简单,但自己实现起来就觉得需要考虑好多东西,比如字符集问题,语言包的更新问题(程序修改过之后,如何识别哪些语句需要更新),界面的翻译问题等等;
- 跨平台
不过目前也觉得有些不太好的地方:
- 体系有点太复杂了,掌握XML, XUL, JavaScript和CSS似乎是最基本的,还有XPCOM, XBL, RDF, DOM...,还有一些工具的用法,初学者太难于上手了;
- 界面缺少工具WYSWYG工具,别说Delphi那样的完整的RAD系统了,连glade, wxglade那样的工具都没有见到;
- 中文资料比较少,也就在limodou的学习笔记上看见过一些XUL Tutorial的翻译和学习心得;
- 似乎内存占用有点大(其实我倒觉得挺正常,但我们的用户太挑剔了 :-()
2006年11月30日 星期四
开始学习XUL
这两个月工作开始有些闲暇了,于是一直想早点东西学学,这两日终于确定下来主题了: 开始玩XUL。
- XUL: http://www.mozilla.org/projects/xul/
- Documents: (English, Chinese)
- XULRunner (原名XUL Runtime Environment)
- XUL Tutorial (中文翻译)
- Limodou的学习记录 - XUL部分
2006年8月13日 星期日
更新了一下dictionary tooltip插件的“爱词霸”补丁
先前我对dictionary tooltip插件提供了一个使其支持"金山爱词霸"网站的补丁。这两天发现"爱词霸"的网页有了点细节调整,于是更新了一下,并添加了一个选项:显示所有词典解释还是只显示一个。
为了方便,直接提供了xpi安装包: Dictionary-Tooltip_v0.9.1+iciba.xpi
2006年5月28日 星期日
让firefox支持mht (以及我为什么喜欢Firefox)
是的,我喜欢Firefox。即使在Windows上,也喜欢用它。至于原因,首先是多标签、免除无用的ActiveX(音频、视频等)的骚扰、也不用担心流氓软件的骚扰,这些就不多说了。说点别的,不算插件带来的功能的话,主要原因是:
一是现在常常看电脑太多而眼累,所以需要放大字体,IE对于没有硬性指定字体大小的可以放大,但很多网页偏偏喜欢写死,而firefox总是可以很好地完成这个任务。
二是保存网页,IE的保存很慢,还有进度条显示正在从哪个网站读取哪个图片,真搞不懂,刚才浏览不是已经都取过来了么?而且还常常报告“无法保存此文档”!让你气得够呛。同样,firefox总是可以做的很好。
三是打印,IE的打印常常会不完整,右边的文字会被截掉,Firefox也没这个问题。
只是有一个地方不太爽,就是将一个网页保存下来发给朋友,用firefox保存后还得用tar大包,别人收到后也要先解压才能阅读。这时候我就会去用IE的mht格式(尽管如上所说,常常保存不下来),但要是在Linux上时就只有土办法了。
不过MAF(Mozilla Archive Format)这个插件可以解决这个问题。The Maf project is an archive extension that allows complete web pages to be saved in a single archive file. MAF stands for Mozilla Archive Format and the extension uses RDF to save page meta-data such as the original URL of the page and the date/time the page was put in the archive.
2006年1月17日 星期二
Awesome firefox XUL example!
也许以后的“客户端”都应该用XUL来做

P.S: Fun with Firefox Chrome URLs
(no subject) 2006年1月5日 星期四
让Dictionary Tooltip支持"爱词霸"
修改了一下Dictionary Tooltip(详见前一篇帖子),使得它支持"爱词霸"了
BTW: jar其实用的是zip打包,java的jar好像只是打包而不压缩,但mozilla/firefox用的jar用zip/unzip就可以了实现方法:
修改一下dictionarytipOverlay.js和dictionarytipFunctions.js即可。过滤器代码如下(完整补丁在这里: firefox-dicttip-iciba.patch):
function icibaFilter(ftDoc)
{
var headingSpan = "www.iciba.com
";
var lists = ftDoc.getElementsByTagName("div");
if (lists.length > 0)
{
var result = "";
var found = false;
for (i = 0; i < color="#008a8c">{
if ( lists[i].className == "t15 dicttitle" )
{
result = lists[i].parentNode.cloneNode(true);
found = true;
break;
}
}
if ( !found )
{
lists = ftDoc.getElementsByTagName("ul");
if (lists.length >= 3)
{
result = lists[2].cloneNode(true);
}
}
ftDoc.body.innerHTML = headingSpan;
ftDoc.body.appendChild(result);
}
else
{
ftDoc.body.innerHTML = headingSpan;
ftDoc.body.innerHTML += spanNoResults;
}
}
2006年1月4日 星期三
让firefox即指即译
现在我已经懒得装金山词霸或者stardict了,碰到认识的单词,常常是直接到google或者“爱词霸”网站去查。
不过如果是firefox上,现在有两个解决方法:
1. 装一个google toolbar (google自己提供的那个,而不是原来那个googlebar)
它实际是下载了一个大约1.5M的小词典,所以功能也比较简单,但速度不错。

2. 装Dictinary Tooltip插件。
这是今天在diggdot.us上看见的这篇The Best Firefox Extensions of 2005里面介绍的。它实际是到各种在线词典去查,然后从返回的网页上摘取需要的部分。所以功能丰富一些,但速度上有不太理想。

2005年11月8日 星期二
Python and XUL
在Daily Python-URL上看见的:
Sidnei da Silva: Python and XUL: The Screenshot [«Mark Hammond just shown me a screenshot of Python and XUL. That's right, Python used as scripting language on our most beloved browser to create XUL interfaces.»]
比较完整的说明在这里。上面说估计在Mozilla 1.9上可以看到这个东西。
订阅 帖子 [Atom]
