原文地址:http://www.cnblogs.com/jyli/archive/2010/01/31/1660355.html
研究Webkit内核已经有一段时间了,在这期间我花了很多时间去研读webkit代码,并在网上查阅了不少的资料。在这之后,我开始尝试对Webkit内核进行剪裁,以便得到自己所需的部分。
俗语有言,“独学而无友 则孤陋而寡闻”,遂本着交流的态度拿出来与大家分享之,顺便回顾一下自己这段时间以来走过的路。到目前,本人虽不能说是精 通Webkit内核 ,但也总算是在Webkit内核中游历过了一番,并获得了不少Webkit内核代码的直接经验。
在此,我将以Webkit内核代码为基础,详细介绍Webkit内核的组成以及其各个模块的功能和实现。文章写到哪算哪,有了新的认识也会更新,补充。
什么是Webkit
Wekbit是一个开源的Web浏览器引擎,也就是浏览器的内核。Apple的Safari, Google的Chrome, Nokia S60平台的默认浏览器,Apple手机的默认浏览器,Android手机的默认浏览器均采用的Webkit作为器浏览器内核。Webkit的采用程度由 此可见一斑,理所当然的成为了当今主流的三大浏览器内核之一。另外两个分别是Gecko和Trident,大名鼎鼎的Firefox便是使用的Gecko 内核,而微软的IE系列则使用的是Trident内核。虽然目前市场上IE内核浏览器仍然占据大多数市场份额,但其他内核浏览器也大有后来居上之势。其 中,Webkit作为一款优秀的浏览器内核,它众多优秀的特性引起业内的的广泛关注。尤其是近来,google的加入更是让Webkit有所升温,从 Goole Chrome浏览器, Goole Anroid手机操作系统内置浏览器均采用Webkit作为内核, 近来推出的Chrome OS更是让人期待。从实现角度来讲,据说其比Gecko代码更为整洁清晰,我目前还没研究过Gecko的代码,所以还无从比较。
Wekbit做了什么?
作为浏览器的内核,Webkit做了哪些工作?为了了解这些,先让我们来看下一个Web浏览器究竟做了什么。我们可以从输入输出的角度来看一个 Web浏览器为我们做了哪些工作。先看一个简单的例子,Web浏览器的输入是一个HTML文档,输出则是一个我们用眼睛所看到的一个Web页面, 就普通用户而言它的输入和输出就是这么简单,如下图所示。
那么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了。
待续....
- 大小: 34 KB
- 大小: 18 KB
- 大小: 23.5 KB
分享到:
相关推荐
ios-webkit-debug-proxy-1.9.0-win64-bin
display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; 后来发现代码里写的好好的,一到页面上居然没有反应,和没写一个样,f12看了下,原来是-webkit-box-orient: vertical;这个属性丢失,...
qt5-qtwebkit-5.9.1-2.el7.x86_64.rpm插件,完美解决Teamviewer Linux 报错
在早期的浏览器实现中,WebKit浏览器(如Safari和Chrome)引入了一个实验性的前缀 `-webkit-box` 来支持弹性布局。这个前缀版本的弹性布局为后来的正式规范打下了基础。本文将详细讲解`-webkit-box`的用法,并通过...
qtwebkit-Windows-Windows_7-Mingw73-Windows-Windows_7-X86.7z qtwebkit-Windows-Windows_10-Mingw73-Windows-Windows_10-X86_64.7z qtwebkit-Windows-Windows_10-MSVC2017-Windows-Windows_10-X86.7z qtwebkit-...
Linux7安装teamviewer_13或teamviewer_14版本缺少qt5-qtwebkit包,可使用rpm -ivh qt5-qtwebkit-5.6.2-1.el7.x86_64.rpm --nodeps安装qt5包,在安装teamviewer即可。 error: Failed dependencies: libQt5WebKit.so....
WebKit.NET-0.5-bin-cairo 是一个专为.NET开发者设计的开源项目,它提供了对WebKit浏览器内核的.NET封装,使得.NET程序员能够方便地在自己的应用程序中集成和使用WebKit来展示和操作网页内容。WebKit是一个强大的、...
标题中的"qt5-qtwebkit-5.9.1-1.el7.x86_64.rar"指的是一款基于Linux平台的Qt5 WebKit库的版本为5.9.1的软件包,该包是为64位系统(x86_64)设计的,并且适用于Red Hat Enterprise Linux 7(el7)。这个压缩包采用...
"webkit-ubuntu-20.04.zip" 是一个针对 Ubuntu 20.04 平台优化的 Webkit 源代码或构建环境的压缩包。 在压缩包内,我们可以看到以下几个关键文件: 1. **protocol.json**:这是一个描述调试协议的文件,通常用于 ...
标题中的"qt5-qtwebkit-5.9.1-1.el7.x86_64.rpm"是一个基于RPM(Red Hat Package Manager)格式的软件包,它包含了Qt5框架下的QtWebKit模块。QtWebKit是Qt库的一个部分,用于在Qt应用程序中渲染Web内容,支持HTML5、...
然而,需要注意的是,尽管-webkit-line-clamp广泛应用于实际开发中,但它并非W3C官方标准的一部分,因此在使用上具有一定的局限性,主要在WebKit内核的浏览器中有效。 接下来,我们来看看它的使用方法和组合的属性...
在CSS3中,`-webkit-box-reflect` 是一个非标准的Webkit私有属性,用于在特定元素的下方、上方、右侧或左侧创建倒影效果。这个属性主要用于基于WebKit的浏览器,比如Chrome和Safari,以及一些移动端浏览器。由于它是...
安装Mac 可以简单的使用 brew 安装: brew install ios-webkit-debug-proxyLinux 或者 Mac: sudo apt-get install \ autoconf automake \ libusb-dev libusb-1.0-0-dev \ libplist-dev ...
总之,WebKit.NET-0.5-Chrome的内核WebKit的NET版.zip是一个让.NET开发者能够利用WebKit内核的工具,它提供了丰富的功能和API,可以用来构建具有现代Web浏览能力的应用程序或组件。虽然这个版本可能较旧,但它仍然是...
标题中的"qt5-qtwebkit-5.9.1-2.el7.x86_64.zip"指示了这是一个与Qt5 WebKit相关的软件包,版本号为5.9.1,适用于64位的 CentOS 7操作系统。Qt5 WebKit是Qt框架的一部分,它是一个用于渲染Web内容的模块,基于WebKit...
ios-webkit-debug-proxy 允许开发人员通过 DevTools UI 和 WebKit 远程调试协议在真实和模拟的 iOS 设备上检查 MobileSafari 和 UIWebViews。 DevTools 请求被转换为 Apple 的 Remote Web Inspector 服务调用。
成功安装Teamviewer的关键,解决:缺少libQt5WebKitWidgets.so的关键包。 以下是错误原文 Error: Package: teamviewer-13.0.6634-0.x86_64 (/teamviewer.x86_64) Requires: libQt5WebKitWidgets.so.5()(64bit) >= ...