什么是Webkit

Wekbit是开源Web浏览器引擎,也就是浏览器的内核。 苹果的Safari、谷歌的Chrome、诺基亚s60平台的默认浏览器、苹果手机的默认浏览器、安卓手机的默认浏览器都采用Webkit作为浏览器内核Webkit的采用度由此可见一斑,理所当然地成为目前主流的三大浏览器核心之一。 另外两个分别是Gecko和Trident,著名的Firefox使用的是Gecko内核,微软的IE系列使用的是Trident内核。 目前,市场上IE内核浏览器仍然占据着很大的市场份额,而其他内核浏览器也是后来的大势所趋。 其中,Webkit作为一种优秀的浏览器内核,其许多优秀的特性引起了业界的广泛关注。 特别是最近,谷歌的加入进一步加热了Webkit,从谷歌Chrome OS浏览器、谷歌An roid手机的OS内置浏览器中采用了Webkit作为内核,最近发售的Chrome OS更加令人期待。 从实现的角度来说,据说比Gecko代码更干净、更清晰,但因为我目前还没有研究过Gecko的代码,所以还不能比较。

Wekbit做了什么?

作为浏览器的内核,Webkit做了什么工作? 为了理解这些,我们先看看下面的Web浏览器做了什么。 可以从输入输出的角度看到Web浏览器做了什么。 我们先来看一个简单的例子。 Web浏览器的输入是HTML文档,输出是我们看到的网页。 对于一般用户来说,其输入和输出如下图所示很简单。

Webkit的输入和输出是什么呢? 如果知道了这个,我们就可以清楚地知道Webkit在做什么。 但是,要澄清这一点还很难。 Webkit的输出更复杂。 因为那个输出本来就没有直接面向用户。 现在简单地说,Webkit的输入是web文档,输出是看不见的模型,浏览器的上层使用这些模型描绘了我们看到的实际页面。 必要时,将更具体地考虑这些模式。

Wekbit组成


Webkit实际上包含三大部分,至少从代码结构上来说是这样的,当然,如果细分的话还能够划分出更多的模块。如下图所示

 

其中,WebCore是Webkit的核心部分,它实现了对文档的模型化,包括了CSS, DOM, Render等的实现, JavaSript Core显然是对JavaSript支持的实现。而橘黄色标注的Webkit部分包含了很多不同平台对Webkit封装的实现,即抽象出了与浏览器所能直 接对应的一些概念的实现,如,WebView,WebPage, WebFrame等。这三部分共同构成了Webkit, 在源码中,它们分别对应这个这三个目录, 即Webkit三大部分为WebCore, JavaSript Core,Webkit。

 

应用程序如何利用Webkit的


从下图可以看出,利用Webkit的应用程序的位置处于Webkit模块之上,应用程序并不直接和WebCore以及JavaScript Core来打交道,也不需要和它们打交道,而是同我前面提到过的Webkit模块来交互,从而屏蔽了WebCore和JavaSript Core部分。Webkit模块实际上抽象出了大多数应用程序所需要的那一部分,这里所说的大多数应用程序其实就是指的浏览器, 对于实现一个浏览器而言,Webkit模块所提供的接口已经足够。不过对于某些应用,可能得对其实施一定的改造,但是话又说回来,Webkit本来就是被设计成为Browser的内核而被实现的。

看到这里,也就是说如果我们要想利用Webkit来实现一个功能完善Browser或其他类浏览器应用程序的话,你只需要了解Webkit模块部分 就足够了,更确切的说只需要了解它所提供的接口就够了。事实上,大多数平台,如果采用了Webkit内核作为浏览器内核组件的话,所提供的对应文档部分都 是关于Webkit模块所提供的接口的描述。很多平台都提供了Browser组件,其使用方法就像是其他可视组件一样,在应用程序中应用起来非常方便。比 如,某平台提供了叫做WebView的可视化组件,我们就可以通过如下几行代码来展示一个网页, 使用的代码仅仅三行。

WebView *view = new WebView();

view->load(Url(“http://www.google.cn”));

view->show();

以Webkit作为浏览器组件的平台有不少,包括Symbian S60, Android, Qt, GTK等等,前不久看到消息,好像Black Berry也准备在自家的手机上使用Webkit了。