2007年10月14日 星期日

Mozilla XUL Links 2007-10-14

Mozilla 2早就提出来了,每个人都有很多想法,期望能够摆脱老版本中一些不太优雅的设计与实现。
到底thundirdbird后续会怎样,现在说法很多,闹不清楚。

标签: ,


2007年9月27日 星期四

几个不错的Thunderbird扩展

用Thunderbird大半年了,也一直没怎么用扩展,除了Remove Duplicate Messages,因为我的邮件是几个地址汇总过来的,总存在重复。

前几天在它的扩展库里面逛了一下,发现以下几个不错:
ThunderBrowse: 在Thunderbird中直接浏览网页
Tag the Bird: 给邮件添加标签
MessageFaces: 显示Face/XFace头像
Colored Diffs: 采用彩色显示补丁,并且可以转换成unified, side-by-side等几种方式显示
Quote Colors: 邮件中引用的部分采用不同的风格来显示(不过好像不能象Claws Mail那样自己定义哪些字符是引文字符,虽然常用的是'>'和'|'
XNote: TB支持给邮件添加标签(tag),但如果想添加一些注释,就得需要XNote这类扩展了。虽然很多扩展都是这个功能,但好像只有XNote可用于TB2

标签: ,


2007年9月10日 星期一

Mozilla/XUL Links 2007-09-10

标签: , ,


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是如何传递事件源和参数的

代码这个东西就是这样,你一路看下来,挺好懂的,没啥稀奇,但一旦自己写起来,就觉得好多细节搞不清楚了。我在试验XUL的时候碰到一个典型的这样的问题:多个控件的onclick事件可以绑到同一个javascript函数,但它怎么识别是那个控件触发了这个事件呢? 怎么传递点击的位置呢?如果传递多个参数的话,控件触发事件的代码要分开写么?

查了一下DOM Level 2 Event Model规范(mozilla.org上说明),发现HTML/XUL里面是传递了一个event对象来解决这个问题,这个对象有很多属性,但不是每次这个对象里面所有属性都有所用:event.target表示触发事件的对象,event.clienX是点击事件中的点击位置,event.keyCode是按键事件中的键码。

标签: ,


2007年8月2日 星期四

做了个xulplanet的镜像chm

最近研究Mozilla XUL, 发现老是要到Mozilla Developer Center, Mozilla Wiki, XULPlanet这几个网站查阅文档,今天干脆用Teleport Pro拉了它们的镜像下来。考虑到小文件比较占空间,而且没有索引,于是想把它们进一步做成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"相关资料时,发现了这个。
  1. http://talkgadget.google.com/talkgadget/client 添加为书签,注意选中”在侧栏打开此书签“
  2. 点击此书签,当当!

标签: , ,


2007年7月31日 星期二

Rich Internet Application? Rich Client?

最近在网上查资料,被Rich Client(富客户端)和Rich Internet Application两个概念搞得头晕。虽然名词都是“相”,但大家约定清楚交流起来容易一些:-)。仔细研究一番之后,得出结论如下:
不过网上很多文章谈到rich client时,可能还是关注在“用户体验”的丰富性上。所以才会有“OpenLaszlo 是一种富客户机应用程序架构"、“Flash成web浏览器标准, 富客户端指日可待”这样一些说法。

其实Mozilla XUL完全满足两方面的要求,大家常用的Firefox, Thunderbird等可以类比为rich client, 而网站上直接提供XUL则就是RIA了。
例如: Mozilla Amazon Browser, 如果你把它安装为一个Firefox插件或者独立程序,它可能又算一个rich client了。
再例如htmlhelp.dotsrc.org提供的API浏览器, 左边是一个XUL编写的导航栏,比如Python, GTK+

链接:

标签: , ,


2007年7月30日 星期一

Document Map in Firefox

浏览网站碰到比较长的网页时,总是想起dillo里面那个文档结构图菜单,它会把网页中的h1 - h6等heading搜索出来列在菜单上,你选一个就跳过去了,不必要网页作者在网页上自己做一个"目录"。

在Firefox Add-ons里面搜索了一下,找到了 Document Map这个插件(screenshot),它提供类似的功能,只不过是采用sidebar来做的。

标签: ,


2007年7月4日 星期三

Firefox扩展实例分析: IETab (2)

接下来的问题就是: Firefox里面的每个Tab页都是一个browser对象,里面显示网页,是调用Gecko来显示的,XUL的overlay对这个没有作用,怎么把这个object标签塞进去?即使想用xbl,也得有个可以让我们重新绑定的tag啊。

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() {
  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);}
也许有朋友会问: 怎么在Firefox地址栏显示的是http://www.microsoft.com而不是前面说的那个chrome://...呢?看看ietabOverlay.js就 明白了: 它把browser的currentURI属性的获取方法给动态替换了(见 hookBrowserGetter和getCurrentIeTabURI函数),为了完备还把urlbar的value属性获取方法、browser 的sessionHistory等给替换了。这种用法以前俺倒是没有见过,算是又学了一招,不过IETab的这种做法不是很可靠,很容易失效。

标签: ,


2007年7月1日 星期日

Firefox扩展实例分析: IETab (1)

IETab是大家在Windows下常用的Firefox扩展之一,用它可以浏览那些费用IE不可的网页。

大概浏览了一下IETab扩展的文件列表,没几个文件,以为这个插件比较简单,也就是嵌入了一个IE的ActiveX进来,再处理一下对应的命令等。

但仔细琢磨一下就发现没有那么简单,怎么嵌入一个IE进去?看了这么久的XUL相关资料,都没有看到哪里讲解当“控件”不够用时应该怎么办,得改Gecko的源代码?

查看IETab发现它采用的是另外一条思路: 将IE的ActiveX控件包装成一个插件,跟Flash等插件一样,采用HTML的object标签嵌入。
object id="IETab" type="application/ietab" style="width: 100%; height: 100%;"
跟IE里面广泛使用的ActiveX不一样,这里这种插件是采用原来netscape定义的NPAPI接口与浏览器打交道的,这个API接口是cross-browser的(倒是IE 5.5之后似乎不再支持这个API接口,你得用另一个ActiveX控件来增加NSAPI支持,这跟Firefox上的npActiveXPlugin恰好相反,后者是用NPAPI包装了一个ActiveX容器,使得ActiveX控件可以在Firefox中使用)。

这个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了。

标签:


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,但是没有任何行为,包括右键菜单。

这 个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能嵌进去,并且能够通过JavaXPCOM交互,那就非常爽了:我们的用户很期望将他们开发的工具集成起来,一直也期望我们这边能够提供一个平台,毕竟现在我们已经有数据管理这一部分了,但我们一直没有一个好的思路,Mozilla XUL/XPCOM是近期考虑的一个方向;另外一些用户又期望将平台搭建到Eclipse平台,毕竟现在这上面的东西已经有非常多了,可以很好地利用一下。

现在既然这两块能够集成到一起,那么我们这边用Mozilla XUL/XPCOM来构建,他们想用Eclipse的就用,不想用的也可以直接用XUL和XPCOM。哈哈。

BTW: 晚上试验了一下,可以将Mozilla(具体说是XUL Runner)嵌入到一个SWT程序中去,成为一个Web Browser, 但还没试验成功如何显示一个XUL界面(也许是我没搞对chrome地址)。

参考:

标签:


2007年5月27日 星期日

Mozilla XUL IDE?

在学习研究Mozilla XUL的过程中,觉得对于开发人员而言,最大的麻烦就是一切都得手工进行,缺乏一个集成开发环境。也许这是Mozilla XUL技术目前相对SilverLight(WPF/E), Apollo而言最大的一个障碍(微软总结经验说:你得先抓住开发人员的心)。

但我们也不是啥都没有:
前面一段时间Mozilla社区一直在争论XULRunner的发展方向, 是只需要满足Firefox 3的需要呢,还是尽力将其发展成为一个通用的应用程序运行环境?现在似乎大家达成一致了:当然是后者。(其实这个目标是大家都渴望的,争论的中心在于做一个通用的运行环境的话,就得保证XULRunner对多个程序的兼容性,这涉及到向前兼容性、API冻结等等,势必拖累Firefox 3对XPFE的改造。于是有人又担心错过目前这个时机,Firefox的风头又被IE8抢过,那有可能我们什么都没有了)

目标一致了,那就开始努力吧。今天在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";

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');
}
* 偏好(preference)
与简单的GUI toolkit不同的是,Mozilla/XUL平台对于偏好(preference)数据考虑比较周全,比如偏好如何存储,如何处理用户设置与系统默认值,扩展如何扩充偏好项目,偏好数据改变(比如直接修改)如何让界面得到相应改变等等。

在Paste and Go 2的代码content/options.xul中, 我们还可以看到另一方面支持: 将一个偏好选项绑定到一个界面控件上,界面初始化时,可自动从偏好数据设置控件的值; 界面控件的值改变时,偏好数据也就变了,不用自己再费很多劲自己写脚本读写数据(想想我们很多时候写程序非常不情愿写个”选项“对话框,这算其中一个主要 原因)。



怎么样,很省事吧?MFC里面的DDX跟这个有点类似,但只能变量与控件值绑定这一步,缺乏将数据持久化 (persistence)功能。

标签:


Firefox扩展实例分析: Paste and Go 2

先看一个简单的插件Paste and Go 2,它的功能是:如果剪贴板有一个URL,那么它允许我们只通过一个操作直接转到那个网站去,而不是先在地址栏目粘贴再点击Go按钮; 对于搜索栏也有类似的功能。

它的源代码可以直接通过网页查看: 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相当方便的一个地方: 通过脚本可以动态地创建、删除界面元素或者设置它们的属性,并且代码相当简洁直观。

标签:


2007年5月18日 星期五

Mozilla的可扩展性(开篇?)

本来我是很少买《程序员》杂志的,主要是能力有限,大都看不懂:-(,所以一向只是在书店里站着翻翻,免得买回去占地方。不过第五期上面居然有一篇《Mozilla的架构设计》,Mozilla的中文文章向来比较少,难得有人肯研究这个啊。于是就买了一本,没想到文章看完,发现居然是absurd写的,呵呵,也是,还能有谁。

开始是被firefox的扩展所吸引,加上工作上也需要类似地扩展能力,于是从去年底开始看一些mozilla/xul方面的资料,慢慢地发现了xul, xbl, xpcom的魅力,于是打算系统地学习一下。
absurd是从mozilla的核心代码角度入手来分析的,但我的习惯是从功能应用的角度来入手,可能是跟我的阅读代码的能力比较差有关:-(。而且我目前主要关心的是这个平台怎么就能够方便地扩充功能。我打算近期从一些Firefox扩展入手,来分析一下mozilla/xul的可扩展性。尽量选取一些在扩展性上有代表性的扩展。

先概括地介绍一下mozilla/xul的扩展能力:

标签:


2007年4月24日 星期二

firefox两个设置问题

Browser.backspace_action
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): 快捷键设置

claws-mail/sylpheed-claws利用了gtk提供的一个很好的特性: 将焦点移动到一个菜单项上,按下一个键,这个键就成了这个菜单项的快捷键(accelerator)。按Del键就可以删除这个快捷键

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): 删除重复邮件

我将三个gmail邮箱的邮件都设置了前转(forward)到公司的邮箱,这几个邮箱对少数几个邮件列表有重复订阅现象,所以删除重复邮件就是一个必须的功能。

claws-mail/sylpheed-claws自带这个功能,但thunderbird没有。不过搜到一个Remove Duplicate Messages插件,虽然很不习惯它的"selected"表示方法,但总算可以解决问题了。

标签: ,


2006年12月22日 星期五

Thunderbird: 如何调整附件栏的大小

新年新气象,除了打算将blog搬个地方之外,邮件客户端也打算切换到Mozilla Thunderbird了(在Debian上已经是icedove了)。不过这个东东除了thread分组这一条让我很不爽之外,还有一个地方: 附件栏会根据附件多寡自动调整大小,如果按每日文摘(daily digest)的方式收一些邮件列表的话,这个附件栏就会变得很大。

本想凭着这些日子对mozilla/xul的学习,自己来解决这个问题。地方是找到了,在chrome/messenger.jar#content/messenger/msgHdrViewOverlay.xul (还是用Total Commander搜索attachment搜到的,它可以搜索压缩包中的文件内容,并且在wine上面运行得很好)。可怎么改都不对。

没办法,还是google吧。没想到一搜"thunderbird attachementView"(后者是在xul文件里面看见的附件栏的id)就找到了: MozillaZine Knowledge Base - Attachment Pane Height

标签:


又试用了一下Thunderbird

我在公司一直是用sylpheed-claws(前不久为了撇清跟sylpheed的关系改名为claws-mail)来收发邮件的(在家里有gmail就够了 :-)),但现在不怎么“玩”cygwin了,觉得每次都要拉起一个X server来跑sylpheed-claws有点烦,于是又来试用Mozilla Thunderbird。

其实几年前在家里用过一年Thunderbird,现在也忘了为什么后来没有用它了。

但Thunderbird 对于thread的支持让我决定还是用claws-mail: Thunderbird将排序和分组这搅和在一起,只有选择按thread(中文翻译为话题)排序才能再选择按排序分组,也就是说我没有办法按照常见的按 thread分组再按时间排序。"

标签: ,


2006年12月17日 星期日

XUL学习杂感

标签: , ,


2006年12月10日 星期日

Mozilla/XUL平台在哪些方面吸引我

前几天说,我想学习一下XUL了。为什么呢?

我赖以混饭吃的项目组的项目的业务层越来越复杂,用户们也不满于我们接纳和实现功能需求的速度,期望能够自己搞二次开发。为此我们在前一个版本中 全面加强了脚本扩展,以便能够方便外围业务的开发。但这只是解决了逻辑方面的问题,但缺少界面扩展能力,那怕只是提供几个选项的简单的对话框。

通过Firefox的使用,我看到了Mozilla作为一个开发平台的能力,而ThunderBird, Komodo等也说明了Mozilla不仅仅是个浏览器。所以我想学习一下XUL,如果明年能够推动迁移到这个上面来就比较有意思了,即使这个目标达不到我也期望能够从中学到很多思想。

那么,Mozilla/XUL具体在哪些方面吸引我?

不过目前也觉得有些不太好的地方:

标签: ,


2006年11月30日 星期四

开始学习XUL

这两个月工作开始有些闲暇了,于是一直想早点东西学学,这两日终于确定下来主题了: 开始玩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!

Searches amazon... you must see it to believe it!
也许以后的“客户端”都应该用XUL来做:-)



P.S: Fun with Firefox Chrome URLs


User Comments
(no subject)
ZHOUQUAN | 22 七月, 2006 14:28
赞同!!!!!!!!!!!!!!!!!

标签: , ,


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上可以看到这个东西。

本来我对XUL还是有兴趣的(近来的工作也存在一个如何快速制作业务界面(数量多但大都比较简单)的问题),只是一直懒得去学javascript了。

标签: , ,


This page is powered by Blogger. Isn't yours?

订阅 帖子 [Atom]