WebKit结构简介

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.)

Webkit 主要组成

WebKit 主要包括三个部分WebCore、JavascriptCore 及Ports部分。

WebKit 专注的核心部分主要是:

分析Html,Javascript的解析,布局渲染技术。

分别在WebCore/html,JavascriptCore 和WebCore/rendering里面

1 WebCore内容

目录结构

bindings

将Dom Binding 给JavascriptCore 方面的代码,同时包含依据idl 接口描述文件,自动生成对应于JavascriptCore 的Binding 实现的脚本等内容

bridge

主要包含NPPlugin方面的接口访问等内容

css

主要包括与css 方面相关的内容如解析、不同css 规则的定义与实现、css Binding 给JS的接口定义等内容;

dom

主要包括dom方面相关的内容如不同dom元素的定义与实现、dom Binding 给JS的接口定义等内容

html

关于html 方面相关的内容,如不同html 元素的定义与实现、HTMLTokenizer 及HTMLParser等内容

load

主要包括装载资源如html页面、css、js 及image等方面内容;

page

主要包括描述一个Web页面所涉及的内容如page、frame、frameview、frametree、setting、history、chrome、chromeclient等内容;

rendering

主要包括如何使用样式,组织布局、显示html 元素等方面内

plugins

主要包括浏览端如何实现NPPlugin 方面的内容

svg

主要包括与svg方面相关的内

xml

主要包括与xml 方面相关的内容如xml parser、XPath、XSLT等

platform

主要包括与不同平台或外部库相关的内容如graphics(图形输出方面)、network(网络处理方面)、image-decoders(解析不同图片格式方面)等

主要数据结构

为了更加简单有效的描述浏览网页的内容及过程,WebKit 为了明显区分不同方面的内容,采取了不同的namespace 如webcore、javascriptcore、webkit等,webcore 方面的主要数据结构有: webcore::page 、 webcore::frame 、webcore::FrameLoader 、webcore::FrameView 、Document 、DOMWindow 、KJSProxy 、DocumentLoader 、ResourceHandle 、ResourceRequest 、ResouceResponse、MainResourceLoader、RenderObject、RenderView等

总的说来,WebCore 包含了浏览器引擎的核心部分如处理html、dom、css、svg、获取资源、渲染页面过程控制、回调/通知外壳程序以及与Javascript 实现的Binding等等

2 port的内容

Port 方面的主要内容在于提供不同的Port 接口供外部程序使用以及如何与外部程序交互,因为WebKit 中的其它两部分WebCore、 Javascript 实现,从逻辑上讲是不直接提供接口给外部程序使用的。同时为了完成浏览器的核心功能,WebKit 也需要从外部程序中通过Port 接口的方式获取一些支持。

1 WebCore 交互接口

在 WebKit源代码目录结构中WebKit目录下分别包含gtk、mac、qt、win、wx 目录,其分别对应不同的Port 移植方式,在每一个目录下面都包括WebCoreSupport 目录,而在不同的WebCoreSupport目录下分别包含有对类接口WebCore::ChromeClient 、WebCore::ContextMenuClient 、WebCore::DragClient 、WebCore::EditorClient 、WebCore::FrameLoaderClient 、WebCore::InspectorClient 等的实现,它们代表外部程序提供给WebKit 内部使用的接口实现,其中WebCore::ChromeClient、WebCore::FrameLoaderClient非常重要。

2 连接模块 loader

对WebCore 中的page/loader 等方面的类提供对应Port 的实现支持如EventHandlerWin.cpp 、FrameLoaderWin.cpp 、DocumentLoaderWin.cpp、DocumentLoaderWin.cpp、WidgetWin.cpp、KeyEventWin.cpp等. Loader 是在WebKit 里面一个很重要的连接器,通过loader 发起IO下载网页,再通过loader发起解析,已经最后的渲染功能。

3 显示模块WebView和WebFrame

WebView 及WebFrame 主要功能是方便外部程序嵌入WebKit不同的Port 移植对WebView 及WebFrame的定义及实现有所不同,但其与WebCore中的Page、Frame 之间的关系图描述相一致。

4 chrome中对Port移植方面的实现

其基本上与其他Port 移植类似,其主要代码在webkit\glue 目录中, 可重点关注带client_impl.cc 后缀的文件、webview_impl.cc、webwidget_impl.cc 等。但是其究竟如何创建原生windows 窗口、如何创建Render 进程、 Render 进程与创建的原生windows 窗口的关系如何等需要更进一步深入研究Chrome,如果能从上面提到的Port部分入手也许很快就可得到答案。

5 Android中对Port移植方面的实现

其实现有点特殊,由 于Andriod 将WebKit 以一个Java 类接口的方式提供给Java 环境使用(不像上面提到的Chrome、Safari 等都是将WebKit 以 一个C++动态或静态库的方式供C/C++外部程序调用),这样WebKit 内部与外部即JavaVM 的交互(如上面提到的ChromeClient、FrameLoaderClient 接口实现)需要一个Bridge 类来协调处理,同时WebView、WebFrame 接口绑定给JavaVM 的jni 接口实现也需要通过这个Bridge 来支持协调处理。具体可详细参考android源码代码中WebCore\platform\android目录下的源文件。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值