`
vvvvbbbb
  • 浏览: 20766 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

WebKit内核源代码分析(三)

阅读更多
摘要:浏览器的请求一般是以页面请求为单位,当用户通过网址栏输入一个url,浏览器就开始一个页面请求。而一个页面请求可能包含有一到多个页面子帧,以及图片、CSS和插件等派生子资源。Page类就是用来对应这样的页面请求。Page类是WebKit中非常重要的一个类,它就像内核对外的一个聚合器。

关键词:WebKit内核源代码,WebCore,Page,Frame,WebKit架构
1.    概述

浏览器的请求一般是以页面请求为单位,当用户通过网址栏输入一个url,浏览器就开始一个页面请求。而一个页面请求可能包含有一到多个页面子帧,以及图片、CSS和插件等派生子资源。Page类就是用来对应这样的页面请求。前进后退,导航,编辑,右键菜单,设置,Inspector等这些用户参与的动作,大部分是同Page相关的。而标记语言解析、排版、加载则更多地同Frame相关。

我们通过几个图来看下Qt移植中Page类同应用之间的关系。





QWebPage通过QWebPagePrivate维护Page类的指针,并在QWebPagePrivate的构造函数中实例化Page对象。QWebPage类通过之后的createMainFrame调用实例化QwebFrame,而在QwebFrameData的构造函数中,以Page指针为参数调用了Frame::create 创建出Frame对象。





Page类通过组合其它类的方式,实现了很多功能,Page类本身并没有多少代码。
2.    类关系
2.1  PageGroup





PageGroup并不是用来对Page进行管理的,而是设计用来将一些具有共同的属性或者设置的Page编成组的,以方便对这些属性进行管理。目前这样的属性包括localStorage的属性,IndexDB,User Script,User StyleSheet等。最常见的同PageGroup相关的操作是维护已访问链接(如addVisitedLink等接口)。根据地瓜的理解,假设WebKit内核之上架设多个应用(浏览器是一个应用),比较可能的是,一个应用独立一个PageGroup。这里同多tab页没有关系,多tab页属于同一个PageGroup。地瓜曾在mailing group上就这个问题咨询过,一位RIM的同学给我举了一个例子,比如一个基于WebKit的邮件程序,一方面他可能调用基于webkit的browser来显示网页,另外他本身也基于webkit来显示一些邮件,这两个之间的setting有很大可能不一样,他们就使用不同的PageGroup。

PageGroup中有这个Group已经安装并且使用的User Script和User StyleSheet的集合,一般在网页解析完毕后,这些User Script和User StyleSheet会插入到Document中。

PageGroup中还维护了Local Storage和Index DB相关的设置,比如它们的Path,上限等,通过GroupSettings类实现。

PageGroup创建以后,每次创建一个新的Page对象,会通过addPage接口加入到这个PageGroup的m_pages中。

每次有导航行为发生的时候,会调用addVisitedLink来将url加入到已访问链接中。如果浏览器要跟踪已访问的接口,则在初始化的时候必须调用PageGroup::setShouldTrackVisitedLinks,且参数为true。此处shouldTrackVisitedLinks是一个静态的全局变量,也就是说,所有应用维护一样的行为(一个应用将其设置为false会影响到其它同样基于此核的应用)?

Page类中维护了PageGroup的指针,并提供了group接口,这是个lazy接口,如果m_group不存在,会调用InitGroup来创建一个。对于Page类来说,如果没有设置GroupName,则在初始化的时候会生成一个空GroupName的PageGroup,由m_singlePageGroup维护,并把指针赋给m_group,如果以非空的名字调用了setGroupName,则会重新创建PageGroup,此时这个PageGroup由m_group来维护。
2.2  Setting

WebCore中的设置相关的类,浏览器应用的不少配置、选项同该类相关,Qt移植中,应用在创建Page对象后,会根据Page::settings来实例化QwebSetting。
2.3  Chrome

原生窗口接口类,参考地瓜写的”WebKit中的Chrome和ChromeClient”。
2.4  其它

SelectionController :负责管理Page中的选取操作,绝大部分选取操作是基于Frame的,只在Frame的Selection为空的时候,对焦点游标的绘制工作才会使用到Page类的SelectionController。

SharedGraphicsContext3D:共享3D图形上下文,为了优化2D显示而加入。在加速的2D canvas中,引入的DrawingBuffer的概念,SharedGraphicsContext3D提供了createDrawingBuffer来创建DrawingBuffer。

DragController:拖拽控制器。Chrome的超级拖拽功能同这个有关?地瓜会在以后对此进行求证。

FocusController:焦点控制器。考虑到焦点会在各个frame之间切换,所以由Page类维护焦点控制器最合适不过。

ContextMenuController:右键下拉菜单控制器。

InspectorController:Inspector控制器,浏览器中的很多开发工具都同这个类相关。

GeolocationController:定位定位服务控制器。

DeviceMotionController:设备移动控制器

DeviceOrientationController:设备方向控制器

SpeechInputClient:语音输入Client。

ProgressTracker:进度跟踪。

BackForwardController:前进后退操作控制。

Frame:一个Page由至少一个主帧和若干个其它子帧构成。

HistoryItem:历史记录。

PluginData:插件相关,未来可能同PluginDatabase类合并。主要是初始化Plugin的信息。

PluginHalter:用来控制Plugin的停止和重新开始。

RenderTheme:这个类提供了控件的渲染和绘制接口。Qt移植中,RenderThemeQt是RenderTheme接口的具体实现。

EditorClient:同编辑功能相关,比如拷贝、剪切、删除等操作。
  • 大小: 12.1 KB
  • 大小: 14 KB
  • 大小: 86.8 KB
分享到:
评论

相关推荐

    webkit内核源代码分析

    webkit开发学习笔记(全面)_第一版 webkit内核源代码分析(1)

    WebKit内核源代码分析

    **WebKit内核源代码分析** WebKit 是一个开源的网页渲染引擎,被广泛应用于苹果的Safari浏览器、谷歌的Chrome浏览器以及其他许多桌面和移动平台。它负责解析HTML、CSS、JavaScript等网页内容,并将它们转化为用户...

    WebKit内核源代码分析3

    《WebKit内核源代码分析3》是一篇深入探讨WebKit内核设计与架构的专题文章,主要聚焦于WebKit的源码解析,尤其是针对Qt平台的移植。尽管移植内容不是重点,但这一系列文章的核心仍然是WebKit内核本身。WebKit是全球...

    WebKit内核源代码分析(三)

    ### WebKit内核源代码分析(三):Android中的WebKit介绍 #### 一、WebKit概述与URL处理 本文档深入探讨了WebKit在Android环境下的实现原理,并特别关注了WebKit如何处理URL请求及其相关的CSS样式应用等内容。...

    webkit 内核源代码分析2

    ### WebKit内核源代码分析2 #### 一、引言与概述 在《WebKit内核源代码分析2》这篇文章中,作者继续深入探讨WebKit浏览器引擎的核心架构与工作原理。通过对WebKit源代码的剖析,文章重点讲解了WebKit的内核设计...

    WebKit内核源代码分析(1)

    本系列通过分析WebKit的源代码,试图分析WebKit的内核设计架构,模块之间的关系,分析的时候以QT的移植为参考,涉及移植的东西不多,主要还是以内核为主。在分析内核的时候,Frame是首当其冲的一个类,本文将分析...

    Webkit内核源代码分析

    通过深入研究Webkit内核源代码,我们可以了解浏览器如何解析和渲染网页,如何执行JavaScript,以及如何处理网络请求和本地存储,这对于前端开发人员优化性能、解决兼容性问题和开发自定义浏览器具有极大的帮助。...

    Webkit内核源代码分析(四)

    ### Webkit内核源代码分析(四):Android中的WebKit详解 #### 一、引言 在本篇文章中,我们将深入探讨Android系统中使用的WebKit浏览器引擎,并对其内部工作原理进行详细解析。WebKit作为一款开放源代码项目,在...

    WebKit内核源代码分析(五)

    ### WebKit内核源代码分析:深入理解Android中的WebKit #### 概述 在现代移动设备上,浏览器作为用户访问互联网的主要入口,其性能和稳定性至关重要。WebKit是苹果公司在Safari浏览器中使用的开源渲染引擎,它不仅...

    Webkit内核源代码分析(2)

    本系列通过分析WebKit的源代码,试图分析WebKit的内核设计架构,模块之间的关系,分析时以QT的移植为参考,涉及移植的东西不多,主要还是以内核为主。FrameLoader类负责一个Frame的加载,在Frame的流程中起到非常...

    webkit内核源代码分析5

    ### WebKit内核源代码分析第五篇:HTML解析与DOM构建 #### 一、HTML解析器与DOM构建 在WebKit的内核设计架构中,HTML文档的解析与DOM树的构建是极其重要的环节。这部分内容涉及到WebKit如何处理HTML文档,并将其...

    webkit内核源代码分析(2)

    ### WebKit内核源代码分析(二):深入解析WebCore::FrameLoader #### 引言 在上一篇文章中,我们已经对WebKit的核心组件之一——WebCore中的`FrameLoader`进行了初步了解。本文将继续深入探讨`FrameLoader`的内部...

    WebKit内核源代码分析(3)

    浏览器的请求一般是以页面请求为单位,当用户通过网址栏输入一个url,浏览器就开始一个页面请求。而一个页面请求可能包含有一个到多个页面子帧,...Page类是WebKit中非常重要的一个类,它就象内核对外的一个聚合器。

    WebKit内核源代

    **WebKit内核源代码分析** WebKit 是一个开源的网页渲染引擎,被广泛应用于各种操作系统和浏览器,如苹果的Safari和谷歌的Chrome。在Android平台上,WebKit被用作原生浏览器和其他应用的网页显示组件。深入理解...

    一个完整的WebKit嵌入式浏览器内核源代码

    2. **构建系统**:WebKit使用复杂的构建系统,如WebKit Build System或GN(Google Ninja)来编译和链接源代码。开发者需要配置这些工具,确保它们能正确识别并处理Win32和WinCE的目标平台。 3. **图形和UI**:...

    WebKit 开源浏览器内核 源代码 完整版

    这个压缩包包含的是 WebKit 的完整源代码,对于理解浏览器内核的工作原理、进行定制开发或者深入学习网络技术具有极高的价值。 WebKit 内核主要由以下几个关键组件构成: 1. **LayoutEngine(布局引擎)**:负责...

    webkit源代码 浏览器最好,最强大的内核

    总之,"webkit源代码 浏览器最好,最强大的内核"这一主题涵盖了 web 技术的核心领域,无论是对初学者还是经验丰富的开发者,深入研究 WebKit 都能带来极大的收获。通过压缩包中的文件,你可以亲身体验和理解这个强大...

    Webkit内核,含导入WebKit.Interop.dll

    - Webkit是一个开放源代码的项目,基于KHTML和JavaScriptCore,最初由KHTML(Konqueror浏览器的渲染引擎)发展而来。 - Webkit内核以其高性能、稳定性以及对Web标准的良好支持而受到青睐,它支持HTML5、CSS3、SVG...

    c# webkit 内核浏览器简例

    通过阅读和分析这些代码,你可以更深入地理解如何利用C#和WebKit内核构建一个功能完备的浏览器。 总之,C# WebKit内核浏览器是利用C#的强大功能和WebKit的高性能网页渲染能力,实现高度定制化和优化的B/S架构浏览...

Global site tag (gtag.js) - Google Analytics