Android浏览器的内核是Webkit引擎,WebKit的前身是KDE小组的KHTML。

Apple公司推出的Safari浏览器,使用的内核是装备了KHTML的WebKit引擎。

WebKit内核在手机上应用十分广泛。

 

WebKit 是一个开源浏览器网页排版引擎,类似的引擎有:

Gecko作为Mozilla, Firefox的内核,

Trident作为IE的内核(也称MSHTML)。

WebKit所包含的WebCore排版引擎和JSCore排版引擎来自于KDE的KHTML和KJS。

Apple公司选择WebKit作为内核是因为它拥有清晰的源码结构、极快的渲染速度。

 

WebKit由3个模块组成:JavaScriptCore, WebCore, WebKit。

1. JavaScriptCore: JavaScript解释器。

2. WebCore: 项目的核心,用来实现Render引擎。解析Web页面,生成一个DOM树和一个Render树。

3. WebKit: 整个项目的名称。

 

WebCore的主要功能有:

1. Page, 与外框相关的内容,包括Frame, Page, History, Focus, Window.

2. Loader, 加载资源及Cache。

3. HTML, DOM HTML 内容及解析。

4. XML, XML内容及解析。

5. DOM, DOM CORE 内容。

6. Render, 排版功能。

7. CSS, DOM CSS 内容。

8. Binding, DOM和JavaScriptCore绑定的功能。

9. Editing, 所有与编辑相关的内容。

 

JavaScriptCore的主要功能有:

1. API, 基本JavaScript功能。

2. Binding, 与其他功能的绑定,如DOM, C, JNI。

3. DerviedSource, 自动产生的代码。

4. ForwordHeads, 头文件,无实际意义。

5. PCRE, Perl-Compatible Regular Expressions.

6. KJS, JavaScript内核。

7. WTF, KDE的C++模型库。

 

WebKit的解析过程

1. CURL得到Stream。

2. 解析拆分字符串。

3. 通过DOM Buider按合法的HTML规范生成DOM树。

4. 如果有JavaScript, JSEngine就通过ECMA-262标准完善DOM树。

5. 把DOM传给LayoutEngine进行布局,如果有CSS样式,就通过CSSParser解析。

6. 最后Rendering渲染出来。

 

Google对WebKet进行了封装,为开发者提供了丰富的API,其中最重要的是android.webkit.WebKit控件。

Android网络开发之WebKet引擎基础的更多相关文章

  1. Android 网络开发之WIFI

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为&qu ...

  2. Android网络开发之用tcpdump抓包

    Android开发过程中,当涉及到网络通信的时候,有一些字段须要抓包获取.我之前由于SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对照发现了这个困扰我非常久的问题.总之,掌握在Androi ...

  3. Android网络开发之OkHttp--基本用法POST

    1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程.主要分为五步: (1).声明并实例化一个OkHttp ...

  4. Android网络开发之OkHttp--基本用法GET

    1.OkHttp框架使用了OkIo.jar包,不要忘记添加. 2.对于Request对象是如何实例化的,大家可以参考--java builder设计模式 http://www.cnblogs.com/ ...

  5. Android网络开发之Volley--Volley自定义Request

    1.自定义一个解析Json的Request,这里使用JackSon框架来解析Json.你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json. 2.我们首先来看一下Stri ...

  6. Android网络开发之Volley--Volley基本用法ImageRequest(三)

    1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageReque ...

  7. Android网络开发之Volley--Volley基本用法JsonObjectReques(二)

    1.JsonObjectRequest用法 用法和StringRequest基本相同,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置JsonObjectRequest对象 ...

  8. Android网络开发之Volley--Volley基本用法StringRequest(一)

    1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入Request ...

  9. Android网络开发之WIFI

    WIFI全称Wireless Fidelity, 又称802.11b标准.WIFI联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance( ...

随机推荐

  1. javax.mail 遇到501 mail from address must be same as authorization user 的問題

    使用不同的兩個帳戶发送email时,第一个账户可以发送成功,但到第二个账户的时候就报出了501 mail from address must be same as authorization user ...

  2. eclipse 开发web程序,启动tomcat插件服务器的时候。部署目录在那里?

    不在tomcat-home/webapps/下面, 你做一个文件上传功能看看就知道了,临时目录一般是你的工作区间workspace\.metadata\.plugins\org.eclipse.wst ...

  3. post文件的html

    <HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio& ...

  4. 【BZOJ】【2730】【HNOI2012】矿场搭建

    Tarjan求BCC/割点 然而似乎我一开始抄的白书的板子哪里抄错了?还是本身哪里不对……(可能是不适用于这道题?因为这题要求求出每个BCC的大小..? 膜拜了ydc的写法= = 其实两次dfs也并没 ...

  5. 我也用github(2)——关联本地工程到github仓库

    github只是为我们提供了一个存储的功能,我们也可以准备一个服务器(当然,能联网是前提了),将版本库保存到服务器上. 本文以github为例进行实验. 1. 在github上创建一个仓库 这个非常简 ...

  6. 【Cocos2d-X开发学习笔记】第12期:动作类CCAction的详细讲解

    一般对于游戏中的精灵而言,它们不仅仅是存在于场景中,而且是动态展现的,例如,精灵移动的动态效果.动 画效果.跳动效果.闪烁和旋转动态效果等.每一种效果都可以看成是精灵的一个动作. 一.动作类(CCAc ...

  7. asp.net中使用ueditor 1.3.6上传图片问题

    在asp.net中使用ueditor 1.3.6版本上传图片时,出现上传成功但是,图片无法正常显示的问题,解决方法如下: 只需要将imageUp.ashx中的info = up.upFile(cont ...

  8. linux CentOS7 安装scala

    1.打开terminal ,进入当前用户路径: cd /home/sks 2.下载Scala2.11 wget https://downloads.lightbend.com/scala/2.11.8 ...

  9. Android -- Gradle

    使用gradle的目的 更容易重用资源和代码: 可以更容易创建不同的版本的程序,多个类型的apk包: 更容易配置,扩展; 更好的IDE集成; Gradle基本结构 使用ide创建的gradle构建的项 ...

  10. 给 TextBlock 加 ToolTip

    <TextBlock ToolTip="{Binding RelativeSource={RelativeSource Self},Path=Text}" Text=&quo ...