`
baseline
  • 浏览: 43483 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

转贴:WebKit

    博客分类:
  • Java
阅读更多

如需转载,请注明出处!
WebSite: http://www.jjos.org/
作者: 姜江 linuxemacs@gmail.com
QQ: 457283

这是一篇自己写于一年前的工作文档,分享出来。

一、WebKit简介

WebKit是一个开源的浏览器网页排版引擎,包含WebCore排版引擎和JSCore引擎。
WebCore和JSCore引擎来自于KDE项目的KHTML和KJS开源项目。Android平台的Web
引擎框架采用了WebKit项目中的WebCore和JSCore部分,上层由Java语言封装,并且作
为API提供给Android应用开发者,而底层使用WebKit核心库(WebCore和JSCore)进行
网页排版。

二、WebKit目录结构

Android平台的 WebKit模块分成 Java WebKit库两个部分,其目录结构如下表所示:

WebKit 模块目录结构

Java 层(根目录 device\java\android\android\webkit

BrowserFrame.java

BrowserFrame对象是对 WebCore库中的 Frame对象的 Java层封装,用于创建 WebCore中定义的 Frame,以及为该 Frame对象提供 Java层回调方法。

ByteArrayBuilder.java

ByteArrayBuilder辅助对象,用于 byte块链表的处理。

CachLoader.java

URL Cache载入器对象,该对象实现 StreadLoader抽象基类,用于通过 CacheResult对象载入内容数据。

CacheManager.java

Cache管理对象,负责 Java Cache对象管理

CacheSyncManager.java

Cache同步管理对象,负责同步 RAM FLASH之间的浏览器 Cache数据。实际的物理数据操作在 WebSyncManager对象中完成。

CallbackProxy.java

该对象是用于处理 WebCore UI线程消息的代理类。当有 Web事件产生时 WebCore线程会调用该回调代理类,代理类会通过消息的方式通知 UI线程,并且调用设置的客户对象的回调函数。

CellList.java

CellList定义图片集合中的 Cell,管理 Cell图片的绘制、状态改变以及索引。

CookieManager.java

根据 RFC2109规范,管理 cookies

CookieSyncManager.java

Cookies同步管理对象,该对象负责同步 RAM Flash之间的 Cookies数据。实际的物理数据操作在基类 WebSyncManager中完成。

DataLoader.java

数据载入器对象,用于载入网页数据。

DateSorter.java

尚未使用

DownloadListener.java

下载侦听器接口

DownloadManagerCore.java

下载管理器对象,管理下载列表。该对象运行在 WebKit的线程中,通过 CallbackProxy对象与 UI线程交互。

FileLoader.java

文件载入器,将文件数据载入到 Frame中。

FrameLoader.java

Frame载入器,用于载入网页 Frame数据

HttpAuthHandler.java

Http认证处理对象,该对象会作为参数传递给 BrowserCallback.displayHttpAuthDialog方法,与用户交互。

HttpDataTime.java

该对象是处理 HTTP日期的辅助对象。

JsConfirmResult.java

Js确认请求对象

JsPromptResult.java

Js结果提示对象,用于向用户提示 Javascript运行结果。

JsResult.java

Js结果对象,用于用户交互

JWebCoreJavaBridge.java

Java WebCore库中 Timer Cookies对象交互的桥接代码。

LoadListener.java

载入器侦听器,用于处理载入器侦听消息。

Network.java

该对象封装网络连接逻辑,为调用者提供更为高级的网络连接接口。

PanZoom.java

用于处理图片缩放、移动等操作

PanZoomCellList.java

用于保存移动、缩放图片的 Cell

PerfChecker.java

用于效率测试的功能对象???

SslErrorHandler.java

用于处理 SSL错误消息。

StreamLoader.java

StreamLoader抽象类是所有内容载入器对象的基类。该类是通过消息方式控制的状态机,用于将数据载入到 Frame中。

TextDialog.java

用于处理 html中文本区域叠加情况,可以使用标准的文本编辑而定义的特殊 EditText控件。

URLUtil.java

URL处理功能函数,用于编码、解码 URL字符串,以及提供附加的 URL类型分析功能。

WebBackForwardList.java

该对象包含 WebView对象中显示的历史数据。

WebBackForwardListClient.java

浏览历史处理的客户接口类,所有需要接收浏览历史改变的类都需要实现该接口。

WebChromeClient.java

Chrome客户基类, Chrome客户对象在浏览器文档标题、进度条、图标改变时候会得到通知。

WebHistoryItem.java

该对象用于保存一条网页历史数据

WebIconDataBase.java

图表数据库管理对象,所有的 WebView均请求相同的图标数据库对象。

WebSettings.java

WebView的管理设置数据,该对象数据是通过 JNI接口从底层获取。

WebSyncManager.java

数据同步对象,用于 RAM数据和 FLASH数据的同步操作。

WebView.java

Web视图对象,用于基本的网页数据载入、显示等 UI操作。

WebViewClient.java

Web视图客户对象,在 Web视图中有事件产生时,该对象可以获得通知。

WebViewCore.java

该对象对 WebCore库进行了封装,将 UI线程中的数据请求发送给 WebCore处理,并且通过 CallbackProxy的方式,通过消息通知 UI线程数据处理的结果。

WebViewDatabase.java

该对象使用 SQLiteDatabase WebCore模块提供数据存取操作。

三、 WebKit模块框架

Android平台的 WebKit模块由 Java层和 WebKit库两个部分组成, Java层负责与 Android应用程序进行通信,而 WebKit类库负责实际的网页排版处理。 Java层和 C层库之间通过 JNI Bridge相互调用,如下图所示:

3.1 Java层框架

3.1.1 主要类关系

WebKit模块的 Java层一共由 41个文件组成,其中主要的类关系如下图所示:

  1. WebView

WebView类是 WebKit模块 Java层的视图类,所有需要使用 Web浏览功能的 Android应用程序都要创建该视图对象显示和处理请求的网络资源。目前, WebKit模块支持 HTTP HTTPS FTP以及 javascript请求。 WebView作为应用程序的 UI接口,为用户提供了一系列的网页浏览、用户交互接口,客户程序通过这些接口访问 WebKit核心代码。

 

  1. WebViewDatabase

WebViewDatabase WebKit模块中针对 SQLiteDatabase对象的封装,用于存储和获取运行时浏览器保存的缓冲数据、历史访问数据、浏览器配置数据等。该对象是一个单实例对象,通过 getInstance方法获取 WebViewDatabase的实例。 WebViewDatabase WebKit模块中的内部对象,仅供 WebKit框架内部使用。

 

  1. WebViewCore

WebViewCore类是 Java层与 C WebKit核心库的交互类,客户程序调用 WebView的网页浏览相关操作会转发给 BrowserFrame对象。当 WebKit核心库完成实际的数据分析和处理后会回调 WebViweCore中定义的一系列 JNI接口,这些接口会通过 CallbackProxy将相关事件通知相应的 UI对象。

 

  1. CallbackProxy

CallbackProxy是一个代理类,用于 UI线程和 WebCore线程交互。该类定义了一系列与用户相关的通知方法,当 WebCore完成相应的数据处理,则会调用 CallbackProxy类中对应的方法,这些方法通过消息方式间接调用相应处理对象的处理方法。详细的处理流程在下文中会具体分析。

 

  1. BrowserFrame

BrowserFrame类负责 URL资源的载入、访问历史的维护、数据缓存等操作,该类会通过 JNI接口直接与 WebKit C层库交互。

 

  1. JWebCoreJavaBridge

该类为 Java WebKit代码提供与 C WebKit核心部分的 Timer Cookies操作相关的方法。

 

  1. DownloadManagerCore

下载管理核心类,该类负责管理网络资源下载,所有的 Web下载操作均有该类同一管理。该类实例运行在 WebKit线程当中,与 UI线程的交互是通过调用 CallbackProxy对象中相应的方法完成。

 

  1. WebSettings

该对象描述了 WEB浏览器访问相关的用户配置信息。

 

  1. DownloadListener

下载侦听接口,如果客户代码实现该接口,则在下载开始、失败、挂起、完成等情况下, DownloadManagerCore对象会调用客户代码中实现的 DwonloadListener方法。

 

  1. WebBackForwardList

WebBackForwarList对象维护着用户访问历史记录,该类为客户程序提供操作访问浏览器历史数据的相关方法。

 

  1. WebViewClient

WebViewClient类定义了一系列事件方法,如果 Android应用程序设置了 WebViewClient派生对象,则在页面载入、资源载入、页面访问错误等情况发生时,该派生对象的相应方法会被调用。

 

  1. WebBackForwardListClient

WebBackForwardListClient对象定义了对访问历史操作时可能产生的事件接口,当用户实现了该接口,则在操作访问历史时(访问历史移除、访问历史清空等)用户会得到通知。

 

  1. WebChromeClient

WebChromeClient类定义了与浏览窗口修饰相关的事件。例如接收到 Title、接收到 Icon、进度变化时, WebChromeClient的相应方法会被调用。

 

3.1.2 主要类的设计

3.1.2.1 数据载入器的设计

WebKit模块的 Java部分框架中使用数据载入器来加载相应类型的数据,目前有 CacheLoader DataLoader以及 FileLoader三类载入器,他们分别用于处理缓存数据、内存据,以及文件数据的载入操作。 Java层( WebKit模块)所有的载入器都从 StreamLoader继承(其父类为 Handler),由于 StreamLoader类的基类为 Handler类,因此在构造载入器时,会开启一个事件处理线程,该线程负责实际的数据载入操作,而请求线程通过消息的方式驱动数据的载入。下图是数据载入器相关类的类图结构:

StreamLoader类定义了 4个不同的消息( MSG_STATUS MSG_HEADERS MSG_DATA MSG_END),分别表示发送状态消息、发送消息头消息、发送数据消息以及数据发送完毕消息。该类提供了 2个抽象保护方法以及一个共有方法: setupStreamAndSendStatus保护方法主要是用于构造与通信协议相关的数据流,以及向 LoadListener发送状态。 buildHeaders方法是向子类提供构造特定协议消息头功能。所有载入器只有一个共有方法( load),因此当需要载入数据时,调用该方法即可。与数据载入流程相关的类还有 LoaderListener以及 BrowserFrame,当数据载入事件发生时, WebKit C库会更新载入进度,并且会通知 BrowserFrame BroserFrame接收到进度条变更事件后会通过 CallbackProxy对象,通知 View类进度条数据变更。下面以 DataLoader类为例子,说明数据载入以及与 UI交互过程:

上图中绿色部分是 BrowserFrame处理进度变更事件时,调用 CallbackProxy对象通知视图变更状态的操作,在这里省略。途中灰色部分表示 C层代码,而白色部分表示 Java层代码。

3.2 C层框架

3.2.1 C类与 Java类的关系

1 BrowserFrame

BrowserFrame Java类相对应的 C++类为 FrameBridge,该类为 Dalvik虚拟机回调 BrowserFrame类中定义的本地方法进行了封装。与 BrowserFrame中回调函数( Java层)相对应的 C层结构定义如下:

该结构作为 FrameBridge C层)的一个成员变量( mJavaFrame),在 FrameBridge构造函数中,用 BrowserFrame Java层)类的回调方法的偏移量初始化 JavaBrowserFrame结构的各个域。初始后,当 WebCore C层)在剖析网页数据时,有 Frame相关的资源改变,比如 WEB页面的主题变化,则会通过 mJavaFrame结构,调用指定 BrowserFrame对象的相应方法,通知 Java层处理。

 

2 JWebCoreJavaBridge

与该对象相对应的 C层对象为 JavaBridge JavaBridge对象继承了 TimerClient CookieClient类,负责 WebCore中的定时器和 Cookie管理。与 Java JWebCoreJavaBridge类中方法偏移量相关的是 JavaBridege中几个成员变量,在构造 JavaBridge对象时,会初始化这些成员变量,之后有 Timer或者 Cookies事件产生, WebCore会通过这些 ID值,回调对应 JWebCoreJavaBridge的相应方法。

 

3 LoadListener

与该对象相关的 C层结构是 struct resourceloader_t,该结构保存了 LoadListener对象 ID CancelMethod ID以及 DownloadFiledMethod ID值。当有 Cancel或者 Download事件产生, WebCore会回调 LoadListener类中的 CancelMethod或者 DownloadFileMethod

 

4 WebViewCore

WebViewCore相关的 C类是 WebCoreViewImpl WebViewCoreImpl类有个 JavaGlue对象作为成员变量,在构建 WebCoreViewImpl对象时,用 WebViewCore Java层)中的方法 ID值初始化该成员变量。并且会将构建的 WebCoreViewImpl对象指针复制给 WebViewCore Java层)的 mNativeClass,这样将 WebViewCore Java层)和 WebViewCoreImple C层)关联起来。

 

5 WebSettings

WebSettings相关的 C层结构是 struct FieldIds,该结构保存了 WebSettings类中定义的属性 ID以及方法 ID,在 WebCore初始化时( WebViewCore的静态方法中使用 System.loadLibrary载入)会设置这些方法和属性的 ID值。

 

6 WebView

WebView相关的 C层类是 WebViewNative,该类中的 mJavaGlue中保存着 WebView

分享到:
评论

相关推荐

    转贴:随心所欲的Web页面打印技术

    【正文】 随心所欲的Web页面打印技术是针对基于B/S架构的应用程序中客户端页面打印问题的一种解决方案。传统的Web页面打印方式,如使用IE的内置打印功能或水晶报表,往往无法满足特定的排版和定位需求。...

    转贴:利用钩子技术控制进程创建.txt

    根据提供的文件信息,可以看出标题与描述均指向了“利用钩子技术控制进程创建”的主题,但实际内容似乎并未直接涉及这一技术细节,而是包含了大量非结构化和个人化的文本信息。因此,下面将基于标题和描述中提及的...

    转贴:四十岁的男人要像孩子一样养.doc

    【知识点详解】 1. **情感需求的重视**:40岁的男性在工作和生活中积累了丰富的经验,他们开始渴望更多的家庭温暖和情感互动。他们会喜欢与家人,尤其是孩子一起度过时光,寻找简单快乐,如游戏、亲子活动等。...

    asp.net中的并发控制

    转贴:asp.net中的并发控制 并发控制的类型 通常,管理数据库中的并发有三种常见的方法: 保守式并发控制 开放式并发控制 最后的更新生效

    易语言源码动网转贴.rar

    "动网转贴"这个主题可能指的是在论坛或者社交网络中实现帖子转发或分享的功能。 动网转贴的源码可能涉及到以下几个方面的知识点: 1. **网络通信**:在实现动网转贴功能时,首先需要与服务器进行交互,发送用户的...

    cics整理总结(中文)

    转贴:作者按:当时业界都说CICS思想博大精深,引得版主下大力气苦苦探索,昨日偶然翻了出来,愿意贡献给有需要的网友。后来迫于形式,开始学习使用J2EE、dot NET、XML、PKI、UML、CMM、LINUX等新玩意儿,功夫尚未练...

    怎样配置Windowsxp中的iis使其支持asp_net

    转贴:配置Windowsxp中的iis使其支持asp_net

    易语言动网转贴.rar

    "动网转贴"可能是基于易语言编写的一个功能模块或者工具,用于在论坛或者网站之间转移帖子数据。由于压缩包文件名为“易语言动网转贴.rar”,我们可以推测这可能是一个软件开发资源,包含了一些源代码、教程或者是...

    电子政务-导电泡棉转贴装置.zip

    在“导电泡棉转贴装置”这个特定的场景下,我们可能是在讨论一种用于电子政务设备或系统中的特殊组件。 导电泡棉是一种具有导电性能的泡沫材料,通常用于电子设备的屏蔽、接地或防静电保护。在电子政务设备中,这种...

    动网转贴.e.rar

    【标题】"动网转贴.e.rar"是一个压缩文件,很可能包含了有关动网论坛或社区的相关资源、数据或用户帖子的备份。动网是中国早期知名的网络论坛软件之一,提供了丰富的社区功能,允许用户发帖、回帖、互动等。这个...

    ZZ: 时间管理方法(转贴)

    【时间管理方法(转贴)】 时间管理是个人和团队高效工作的关键,它涉及到如何规划、组织和优化日常活动,以便在有限的时间内完成更多的任务并实现目标。在这个快速发展的IT行业中,良好的时间管理能力可以帮助程序员...

    完全删除sql2005

    完全删除sql2005,转贴:【应用】如何彻底删除SQL Server2005 百度空间_应用平台

    BFC UBB转贴器

    由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br> 而这个小程序则完全不依赖于浏览器,以BFC采集器的UBB转换模块为基础,转换速度超快,...

    论坛专用屏蔽干扰码转贴工具

    标题中的“论坛专用屏蔽干扰码转贴工具”指的是一个专为论坛设计的软件,它的主要功能是处理并转换论坛上常见的干扰码,以便用户能够顺利地复制和粘贴信息。在论坛交流中,有时为了防止恶意爬虫或者保护内容不被搜索...

    动易系统的论坛转贴工具

    《动易系统的论坛转贴工具详解与应用》 在互联网信息交流日益频繁的今天,论坛作为用户互动的重要平台,其内容分享与传播的作用不容忽视。动易系统的论坛转贴工具,便是为了解决用户在论坛间便捷分享内容而设计的一...

Global site tag (gtag.js) - Google Analytics