注:
【转载请注明文章来源、保持原样】

出处: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了。

待续....

转载于:https://www.cnblogs.com/jyli/archive/2010/01/31/1660355.html

Webkit内核探究【1】——Webkit简介相关推荐

  1. [转]Webkit内核探究【2】——Webkit CSS实现

    2019独角兽企业重金招聘Python工程师标准>>> Webkit内核探究[2]--Webkit CSS实现 注:[转载请注明文章来源.保持原样] 出处:http://www.cn ...

  2. Webkit内核探究【2】——Webkit CSS实现

    注: [转载请注明文章来源.保持原样] 出处:http://blog.csdn.net/Li_Jiayu 作者:李嘉昱 CSS在Webkit中的实现属于相对独立的一个模块,注意这里说的是相对. CSS ...

  3. 【ShoppingWebCrawler】-C#开发的基于Webkit内核开源爬虫蜘蛛引擎

    概述 在各个电商平台发展日渐成熟的今天.很多时候,我们需要一些平台上的基础数据.比如:商品分类,分类下的商品详细,甚至业务订单数据.电商平台大多数提供了相应的业务接口.允许ISV接入,用来扩展自身平台 ...

  4. 基于webkit内核webos系统架构

    基于webkit内核webos系统架构 WebOS(Web-based Operating System)或者我们称为网络操作系统,是一种基于浏览器的虚拟的操作系统,用户通过浏览器可以在这个WebOS ...

  5. 八大Webkit内核浏览器

    列举出时下最流行的Webkit内核浏览器,所以我们并不会做出评测和对比. PS:本文列举的浏览器有一部分为IE+Webkit双核浏览器,如果您对其他IE内核浏览器很感兴趣<抛弃数据!用体验和感觉 ...

  6. python webkit内核_Winform调用WebKitBrowser,基于chrome内核WebKit的浏览器控件

    在C#中,默认的WebBrowser控件默认使用的是IE的core,而IE的种种遭人吐槽的诟病使我不敢轻易使用WebBrowser,因此,打算使用Chrome的内核替换IE.Chrome的内核使用的是 ...

  7. 浏览器内核Trident/Gecko/WebKit/Presto

    "浏览器内核"主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.因此,所谓的浏览器内核通常也就是指浏览器所采 ...

  8. Winform中将WebBrower浏览器控件由IE内核修改为Chrome的WebKit内核

    场景 Winform中自带一个浏览器控件WebBrower控件,使用此控件可以很轻易的实现一个桌面端的 浏览器. 新建Winform程序,然后在设计页面在工具箱中拖拽一个WebBrower控件. 然后 ...

  9. WebKit 内核源码分析 (三) Page

    浏览器的请求一般是以页面请求为单位,当用户通过网址栏输入一个url,浏览器就开始一个页面请求.而一个页面请求可能包含有一到多个页面子帧,以及图片.CSS和插件等派生子资源.Page类就是用来对应这样的 ...

  10. -webkit-gradient webkit内核浏览器的Linear Gradients (线性渐变) -Css3演示

    webkit内核的safari. Chrome的Linear Gradients (线性渐变)的几点说明及演示: webkit内核的safari. Chrome的Linear Gradients (线 ...

最新文章

  1. axios使用post请求的时候后台接收不到参数
  2. Rose VS PowerDesigner
  3. Windows进程与线程学习笔记(一)—— 进程结构体
  4. [1-2] Dependence-Aware Service Function Chain Design and Mapping
  5. 2、Flutter 的安装和idea配置
  6. C语言文件读写常用函数总结
  7. java对象转json jackson_使用Jackson将Java对象转换为JSON
  8. mysqlbinlog日志查看
  9. python 搭建的http 动态服务器_Python3搭建http服务器的实现代码
  10. 全开源微信小程序商城系统源码:基于Java+uniapp框架开发
  11. EDA软件_AD14绘制等长线
  12. 西安电子科技大学833真题_【考研名校】2021西安电子科技大学考研资料及历年真题解析汇总...
  13. 穿越计算机的迷雾总结
  14. OLED12864(SSD1306)驱动代码
  15. 低代码平台开发 python_低组词_低的多音字组词,低是多音字吗,低组词有哪些
  16. 文献分享:定义的肿瘤抗原特异性T细胞增强了个性化的TCR-T细胞治疗和免疫治疗反应的预测
  17. HDU 1546 Idiomatic Phrases Game 最短路
  18. [MFC]MFC的BUTTON控件响应鼠标按下和抬起
  19. nginx、php-fpm以及mysql运行在各个用户下的配置
  20. 线程、进程、多线程、多进程 和 多任务

热门文章

  1. 哲理故事与管理之道 14 如何留住员工
  2. 2020年的19种最佳React Native App模板(包括5种免费)
  3. SpringMVC添加登录页面以及首页实现跳转
  4. 斯蒂文斯理工学院计算机科学硕士,斯蒂文斯理工学院计算机科学硕士专业
  5. ASP.NET实现日期转为大写的汉字
  6. vbs打开网页并全屏
  7. mysql file direct_DirectAdmin的Mysql优化
  8. dummy像元概念定义
  9. linux安装智能输入法,Ubuntu 8.04中安装智能拼音输入法
  10. 脑袋里是浆糊时的c++程序