2007年7月31日 星期二
Rich Internet Application? Rich Client?
最近在网上查资料,被Rich Client(富客户端)和Rich Internet Application两个概念搞得头晕。虽然名词都是“相”,但大家约定清楚交流起来容易一些:-)。仔细研究一番之后,得出结论如下:

其实Mozilla XUL完全满足两方面的要求,大家常用的Firefox, Thunderbird等可以类比为rich client, 而网站上直接提供XUL则就是RIA了。
例如: Mozilla Amazon Browser, 如果你把它安装为一个Firefox插件或者独立程序,它可能又算一个rich client了。
再例如htmlhelp.dotsrc.org提供的API浏览器, 左边是一个XUL编写的导航栏,比如Python, GTK+。
链接:
- 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
浏览网站碰到比较长的网页时,总是想起dillo里面那个文档结构图菜单,它会把网页中的h1 - h6等heading搜索出来列在菜单上,你选一个就跳过去了,不必要网页作者在网页上自己做一个"目录"。
在Firefox Add-ons里面搜索了一下,找到了 Document Map这个插件(screenshot),它提供类似的功能,只不过是采用sidebar来做的。
在Firefox Add-ons里面搜索了一下,找到了 Document Map这个插件(screenshot),它提供类似的功能,只不过是采用sidebar来做的。
2007年7月12日 星期四
采用Total Commander打开目录
虽然有些新手觉得Total Commander跟Windows Explorer风格差异太大而不容易上手,但这对我并不是一个问题,因为我用它已经有七八年了。我现在基本不用Explorer。加上最近不知道为啥我的Explorer打开特别慢,就更不爱用它。
机器上装了Google Desktop,对于找到的文件,它提供了一个"打开文件夹"的功能,但很不爽的是,它总用Explorer打开。忍受不下去了,我开始想在它在Total Commander中打开。
到Google Desktop的安装目录和它的注册表中看了一下,没什么可以配置的。
然后上Google Desktop网站,想找一个可以设置这个的插件什么的,也没有。
猜想它是调用ShellExecute来打开的,接着就试图修改注册表中"目录(Directory)"和"文件夹(Folder)"的关联: HKCR\Directory\shell\下并没有open动作, 我添加了并设置命令为C:\Totalcmd\totalcmd.exe /O "%1"之后,ShellExecute(...,"open", ...)没有什么变化,会返回5(ERROR_ACCESS_DENIED),恢复原来的就可以正常打开,奇怪; 修改HKCR\Folder\shell\open\command的值再试却没反应。
某天发现Directory Opus这个软件可以跟Windows系统集成,接管文件夹的打开操作,就安装了一个试用版本,发现它是这样的:
1. 先给HKCR\Directory\shell\下添加一个动作dopus(再下面command键值设置为dopus的命令行)
2. 将HKCR\Directory\shell的缺省值由none改为dopus,这样它的缺省动作就是dopus了
(对于Folder也同样设置。Folder是文件夹,包含Directory和其它一些不跟实际文件系统目录对应的)
俺照猫画虎,添加了一个wincmd动作,将Directory的缺省动作设置为wincmd,再试,搞定!
转成注册表操作就是如下:
补充说明:
1. 这只对ShellExecute时没有指定第二个参数(动作)时是可行的,而Google Desktop恰恰是这样,"运行"对话框也是。但如果它指定了动作是"open",那就只会走open动作了
2. HKCR\Folder\shell\command的值是REG_EXPAND_SZ格式而不是通常的REG_SZ(字符串)格式,奇怪
机器上装了Google Desktop,对于找到的文件,它提供了一个"打开文件夹"的功能,但很不爽的是,它总用Explorer打开。忍受不下去了,我开始想在它在Total Commander中打开。
到Google Desktop的安装目录和它的注册表中看了一下,没什么可以配置的。
然后上Google Desktop网站,想找一个可以设置这个的插件什么的,也没有。
猜想它是调用ShellExecute来打开的,接着就试图修改注册表中"目录(Directory)"和"文件夹(Folder)"的关联: HKCR\Directory\shell\下并没有open动作, 我添加了并设置命令为C:\Totalcmd\totalcmd.exe /O "%1"之后,ShellExecute(...,"open", ...)没有什么变化,会返回5(ERROR_ACCESS_DENIED),恢复原来的就可以正常打开,奇怪; 修改HKCR\Folder\shell\open\command的值再试却没反应。
某天发现Directory Opus这个软件可以跟Windows系统集成,接管文件夹的打开操作,就安装了一个试用版本,发现它是这样的:
1. 先给HKCR\Directory\shell\下添加一个动作dopus(再下面command键值设置为dopus的命令行)
2. 将HKCR\Directory\shell的缺省值由none改为dopus,这样它的缺省动作就是dopus了
(对于Folder也同样设置。Folder是文件夹,包含Directory和其它一些不跟实际文件系统目录对应的)
俺照猫画虎,添加了一个wincmd动作,将Directory的缺省动作设置为wincmd,再试,搞定!
转成注册表操作就是如下:
[HKEY_CLASSES_ROOT\Directory\shell]
@="wincmd"
[HKEY_CLASSES_ROOT\Directory\shell\wincmd]
@="Open in Total Commander" [HKEY_CLASSES_ROOT\Directory\shell\wincmd\command] @="C:\\Totalcmd\\totalcmd.exe /O \"%1\""
补充说明:
1. 这只对ShellExecute时没有指定第二个参数(动作)时是可行的,而Google Desktop恰恰是这样,"运行"对话框也是。但如果它指定了动作是"open",那就只会走open动作了
2. HKCR\Folder\shell\command的值是REG_EXPAND_SZ格式而不是通常的REG_SZ(字符串)格式,奇怪
标签: total commander, windows
2007年7月10日 星期二
澳门
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:
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月2日 星期一
大连
对大连的第一印象,就是这个城市相当漂亮,街道宽畅干净,路上居然还有拖尾巴的电车。楼房有着多国风情,看上去相当舒服,并且没有特别高的住宅楼(反正我是觉得那种楼住着没味道),不愧是最适合居住的城市之翘楚。
这次出差,在大连就两天,自由时间很少,只去了星海广场和俄罗斯风情街看了看。
星海广场怎么这么大啊,太浪费地盘了吧......
晚上8点多钟上街溜达,居然大多数店铺都已经打烊了。地下通道也都明亮整洁(不象深圳,肯花20亿修市政府,还美其名曰市民中心,就是不舍得多建几座好点的过街天桥什么的)。
走到路口,看见一个广场叫“中山广场”,有不少人在广场上玩。转头发现这个广场不是十字路口,而是一个“十路路口”,有十条路汇到这个广场上来,我刚才是从哪条路过来的?啊,晕了
大连的机场怎么离市区这么近?而且周围还有好多住宅楼。在机场碰见同来的同事,他说他家就住在机场对面,奇怪,居然也不觉得吵。
标签: cities
2007年7月1日 星期日
Firefox扩展实例分析: IETab (1)
IETab是大家在Windows下常用的Firefox扩展之一,用它可以浏览那些费用IE不可的网页。
大概浏览了一下IETab扩展的文件列表,没几个文件,以为这个插件比较简单,也就是嵌入了一个IE的ActiveX进来,再处理一下对应的命令等。
但仔细琢磨一下就发现没有那么简单,怎么嵌入一个IE进去?看了这么久的XUL相关资料,都没有看到哪里讲解当“控件”不够用时应该怎么办,得改Gecko的源代码?
查看IETab发现它采用的是另外一条思路: 将IE的ActiveX控件包装成一个插件,跟Flash等插件一样,采用HTML的object标签嵌入。
这个npietab.dll插件对外提供了navigate(), goBack()/goForward(), refresh(), stop(), saveAs()等方法和title, url等属性(详见nsIIeTabPlugin.idl),基本上都是原来IE控件相应功能的一个包装(详见nsScriptablePeer.cpp文件),只是为了可以在Firefox中可以再访问这些接口(那么npActiveXPlugin对外提供那些接口呢?不同的ActiveX有不同的功能接口,npActiveXPlugin怎么就能通用于各个ActiveX呢?难道它目前没有提供可脚本化scriptability的能力? 没源代码就是不一样,琢磨起来比较费劲)。
大概浏览了一下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的能力? 没源代码就是不一样,琢磨起来比较费劲)。
订阅 帖子 [Atom]


