Google Chrome的实现技术

1 尝鲜

Hey,想来你也知道互联网流行先锋google最近又折腾出了个chrome frame 了, 号称可以让你在IE中享受一下google的渲染引擎和V8 的非凡速度。

使用方法有两种,对于内容发布者而言,要做的是在页面中加入一句:

  • <meta http-equiv="X-UA-Compatible" content="chrome=1">

我们大众用户在使用上简单一些,只要在正常输入的网址前加打三个字符 "cf:",这里的cf当然就是Chrome Frame的缩写了。

以上是本周内被无数知名门户网站和个体户Blog都说到烂的内容^_^ 。区区作 为程序员,今天补充一下Chrome Frame的实现原理说明,和八卦(惯例)。

2 浏览器开发架构

在上世纪90年代的浏览器混战中,Mozilla和IE扬名天下,并最终以IE捆绑 windows的全面胜出结束战局。这场大战中出现的软件、设计、平台、标准都影 响深远,可以说直接完成了当下互联网平台的根基(如果没有Mozilla,我们也 难见到现在的Webkit)。

与其它小众浏览器产品不同,IE和Mozilla(网景)都以推动整个互联网世界为己 任(当然都不排除各自的私心)。两个巨头都不约而同地选用C++作为开发语 言,并且分别建立了组件架构和扩展重用机制。IE使用COM , Mozilla使用 XPCOM , 这种开放性的架构给后来的互联网应用带来了无限可能。

COM和XPCOM的扩展能力是等价的。所以当你看不到迅雷看看、网银插件、 QZone的Firefox版,其实并不是因为火狐的功能设计有问题,而是这些公司开发插件太懒~

3 插件开发者的转移

由于IE使用COM的方式扩展,使得许多OLE技术人员能利用手头熟悉的工具迅速 转型,加上无敌的MSDN。可以说IE最先吸引的大量的扩展应用,比如著名的 3721就是在这个时期出现的。

IE扩展的一个主要缺点,是使用本地代码,在没有安全防护的情况下,IE几乎 成了木马病毒的温床,咳,比如著名的*721就是在这个时期出现的^_^ 。

转机出现在IE6发布之后,IE6确定胜局之后,MS几乎完全停止了与浏览器相关 的推进工作。如果你是程序员,你会发现,MSDN中关于浏览器的文档,在IE6之 后就没有什么改进了。MS似乎以为Mozilla已经完灭,转而专心对抗Java了(真 累!)

Mozilla Firefox就在此时横空出世。继承自XPCOM,FF为熟悉javascript的开 发者和爱好者提供了一个便捷、安全、快速扩展浏览器的方案。FF变聪明了, 在完全开源的同时,还不断完善文档服务-MDC -。很快,FF就成为最受开发人员 欢迎的浏览器,要知道,得到开发人员,就等于得到市场(看看例子:Java、 MSDN、 Linux、 PHP)。当然,有一些复杂的扩展如IE tab ,光用js是完成不 了的,但是IE tab和FF都有源码,又天天更新,我们就不细谈了。

4 Chrome Frame的扩展方式实现

如果我们要做一个Firefox Frame(ff: ^_^)。要怎么做呢,MSDN上的IE扩展帮 助虽然很旧,但还是非常有用的。 现在就开说说这些过时得很的技术吧: 用regedit打开注册表项:

  • /HKEYCLASSES ROOT/PROTOCOLS/Handler/

在这里你能看到许多邪恶和善良的IE扩展,其中的mailto和ftp大家都认识吧,cf和 它们几乎一样,就是有点不老实,把所有内容都骗IE,说它们不是htm不是gif 不是jpeg,而是"application/chromepage"! 那IE并不认识chromepage对吧,所以IE会查注册表

  • /HKEYCLASSES ROOT/MIME/Database/Content Type/application/chromepage

这里告诉IE说,让{3E1D0E7F-F5E3-44CC-AA6A-C0A637619AB8}COM对象来帮你 吧,它知道怎么做。喔,所以IE又去问{3E…}咯,这个{3E…}是谁?查查注 册表发现原来是HKEYCLASSES ROOT/ChromeTab .ChromeActiveDocument。 Google的程序是优秀的,命名一目了然,告诉了我们使用的是ActiveDocument 技术。

以上是cf:的实现方式。那那个叫meta的tag呢,抱歉在注册表中线索不多,提 示一下,在HKEYCLASSES ROOT/ChromeTab .ChromeActiveDocument附近有个类叫 HKEYCLASSES ROOT/ChromeFrame .Bho的,作为开发者没听过BHO,不可能吧。 好了,回去翻翻MSDN中关于Binary Behaviors的文档吧。

方法总结:

  • 先用Asynchronous Pluggable Protocols骗过IE的页面引擎
  • 再用ActiveDocument显示chrome的渲染内容
  • 或者直接用Binary Behaviors

都是非常Old School的技术,在Google手中,却如此惊艳。我们是不是应该不 要那么浮澡,专门做好手中的活,别问什么技术过不过时的话呢?

Author: Joyer Huang <collger@sina.com>

Date: 2009-09-26 01:41:43

HTML generated by org-mode 6.21b in emacs 23

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值