由于工作需要,最近在准备一个介绍webkit的PPT文档,我个人断断续续学习webkit的代码也有一年多了,其间也阅读了网上的一些webkit相关技术文章,但中文的资料很少,大部分都是english的,有些E文资料还需要。平常由于自已记性不好,去年看过的一些模块今年再去翻时,竟然没一点印象了,悲剧。。。
所以,借此机会,把自已对webkit的理解先做下笔记,以便于以后需要时可以方便查阅。
需要说明的是,笔记记录的有我个人的理解,也有网上摘录的片段和图片,不一定正确,也会比较凌乱,希望看到的朋友及时指正,共同进步。
一. Webkit的由来
1. 十几年前的故事
1994年,Netscape浏览器曾占据整个浏览器市场的90%,风头无二(也很嚣张)。但随着微软推出win95后,把IE 1.0做为win95的插件发布,开始挑战Netscape的霸主地位,到发布IE 4.x,短短三年时间,打败Netscape。这里面虽然说有与windows集成的原因,但从本身的功能上来讲, IE从速度和对标准的支持上来讲,已真正打败了Netscape。
此阶段的浏览器可称为第一代浏览器。它的主要特点是单窗口型式。竞争的最主要是访问速度、兼容性。原因:90年代都大多是用modem拨号上网,56K/S。
2.Webkit出生
Apple公司在它的Mac OS X里,集成了基于KHTML 改进型的 WebKit 引擎的浏览器,命名
为:Safari,当年苹果比较了 Gecko 和 KHTML 后,之所以选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。(KHTML是由KDE 小组开发的)
随后, apple将它开源。
至此,第二代浏览器,基本上是三分天下:
  Trident: IE系列,以Trident 作为内核引擎;
  Gecko: Firefox 是基于 Gecko 开发;
WebKit: Safari, Google Chrome,搜狗双核浏览器(集成IE和chrome), QQ浏览器5。
WebKit 内核在手机上的应用也十分广泛,例如 Google 的手机 Gphone、 Apple 的 iPhone, Nokia’s Series 60 browser 等所使用的 Browser 内核引擎,都是基于 WebKit。
总结:
webkit是什么?
答:Webkit是一套浏览器排版代码,已开源,主要由apple公司在维护。强调: webkit仅仅是一套排版引擎,
举个例子说明下:
google的chrome是一个浏览器对吧,那chrome主要包含以下模块:外壳UI(多标签,菜单,状态栏,网址输入栏等),读取网络数据的模块,排版解析模块,JS解析引擎。
外壳UI是google自已写的,js引擎是google写的V8, 读取网络数据模块用的winhttp,只有排版引擎用的webkit。
不知道我说清楚了没,呵呵。
WebKit is an open source Web content engine for browsers and other applications. We value real-world web compatibility, standards compliance, stability, performance, security, portability, usability, and relative ease of understanding and modifying the code (hackability).
二. Webkit编译环境
Webkit的:/
说明:下面的几种编译方法,越往下面看越简单噢。
1. Webkit提供以下几种主要的编译环境
1). Max os X(Xcode Tools package)
2). Windows (Visual Studio)        最为常用,毕竟用winxp系统的还是多数
3).QT
4).GTK
具体的环境搭建见:/building/tools.html
2. WebKit winxp下编译小结
网上很多人抱怨webkit总是编译不过,确实, webkit没有提供一个下载代码后,直接可以用VS工具编译的方法,因为它用到了gcc编译环境,在windows下编译的话,需要安装cyg
win才行,由于它的编译脚本用的perl,又需要安装perl的环境。总之比较麻烦。
这也是因为网上的文章,有介绍QT安装环境的,有的是介绍官方webkit的安装环境的,还有的是介绍safari的,所以在网上查阅文档时一定要到你相对应的才行。
重点要注意的地方:
1. 下载Cygwin,一定要下载webkit提供的版本。
2. 用vs2005的话,一定要打SP1.
3. QuickTime SDK和directX SDK必不可少。
4.启动Cygwin ,安装方法,执行./WebkitTools/Scripts/build-webkit脚本。
3. 较简单的编译安装QT webkit
直接在QT的下载如:(该版本是我09年下半年使用的,上应该早有新版本了)
不需要cygwin, 不需要quickTime,只需要执行下面几个步骤:
1、下载安装Visual.Studio.2005,或2008;
2、将解压到某个目录下;以D:\qt4.5.0为例
3、配置环境变量:
在“我的电脑”—“属性”---“高级”---环境变量---**的用户变量---新建,
添加一个变量名为QTDIR 变量值为D:\qt4.5.0\qt-win-opensource-src-4.5.0
PATH变量值为D:\qt4.5.0\qt-win-opensource-src-4.5.0\bin
添加新的环境变量,名字为"QMAKESPEC",值为"win32-msvc2005".
4、编译源代码
通过"开始"菜单 -> "Microsoft Visual Studio 2005" -> "Visual Studio Tools", 运行命令行.
...
到qt源码的目录下,运行命令:
& -webkit
编译过程中,会问一个问题:
是否接受GPL协议,选'y'.
经过一段时间以后,qmake被编译出来了.
接着编译一大堆代码,简单的敲入nmake即可.
5、编译应用程序
>qmake
>nmake
就会在该应用程序下,就会在debug目录下生成可以执行文件。
不过我个人不太喜欢QT,只是安装了跑一跑,QT的安装环境包含了webkit的源代码,同时它自带了一个简单的Browser项目(如下):
编译运行。在Visual Studio中设置browser工程为主工程,然后编译。可以顺利编译完成,下面是运行后的效果图。
4. 最最简单的webkit学习环境-ISee
5. Isee是一位中国人移植的webkit,在winxp下用vs2008直接编译即可调试,用于学习最好,
强烈支持,也是一位同事推荐给我的,后面的代码走读主要基于该环境。
6. Isee还可以直接移植到wince平台运行噢。
7. :le/p/iseebrowser/
备注:原作者已经不再维护了。所以webkit内核的版本号有点老。
8. webkit在vs2008中编译
见 :xjchilli.blog.163/blog/static/4534773920091016115533158/
三. Webkit整体介绍
1. Webkit的结构图(以ISee架构举例):
curl是什么命令
cairo
一个2D绘图库
casqt
Unicode处理用的库,从QT中抽取部分代码形成的
expat
一个XML SAX解析器的库
freetype
矢量字库接口库,用于存取ttf矢量字体文件
libcurl
一个开源的url库,支持HTTP、FTP等协议
Libjpeg,libpng
图像解码库
libxml
基于DOM树的XML解析器
libxslt
XML transform engine
pthread
Pthread库,port of the POSIX thread library
sqlite3
一个小型的数据库,据称在型入式平台是存取速度最快的数据库。
开源,编译后就一个400K的 sqlite.dll。移植非常方便,纯C写的。
wceshunt
一个用于Windows CE平台下的C常用函数封装库
Zlib
Zlib库。用于解压缩。
2. Webkit 源代码由三大模块组成:
1). WebCore,
2). WebKit,
3). JavaScriptCore。
WebCore:排版引擎核心,WebCore包含主要以下模块:Loader, Parser(DOM,Render), Layout,Paint。
WebKit:移植层,主要包含:GUI,File System, Thread,Text,图片编解码等与平台相关的函数。
JavaScriptCore:JS虚拟机,相对独立,主要用于操作DOM, DOM是W3C定义的规范,主要用于定义外部可以操作的浏览器内核的接口,而webcore必须实现DOM规范。
(具体的DOM规范可以查w3c.)
3. WebKit分模块介绍(这里简单列出,后面再具体介绍)
Webkit平台相关
1) CURL网络库
2) libPng, LibJpeg图形处理相关
3) sqlite小型关系数据库
WebCore核心
1) Loader加载资源及Cache 实现(Curl)
2) DOM : HTML词法分析与语法分析
3) DOM : DOM节点与Render节点创建,形成DOM树
4) Render:Render树介绍,RenderBox
5) Layout:排版介绍
6) Css Parser模块
7) Binding-DOM与JavascriptCore绑定的功能
JavascriptCore-javascript引擎
1) API-基本javascript功能
2) Binding与其它功能绑定的功能,如:DOM,C,JNI
3) DerviedSource自动产生的代码
4) PCRE-Perl-Compatible Regular Expressions 
5) KJS-Javascript Kernel
4.页面的整个处理流程(简单介绍,详细流程在后面笔记中)
1. 用户输入网址后,FrameLoader::load函数会接收到URL。
2. 把URL 请求传给CURL库。
3.    CURL发出http请求,得到数据后,传给Loader,开始解析。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。