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

WebKit内核源码分析

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

Frame类是WebCore内核同应用之间联系的一个重要的类。它有点像设计模式中的Façade,将内核的各个不同的零配件组装在了一起,但又不是Façade,因为用户很多时候还是要直接去操作里面的组件。除了设计上的考虑,Frame还有语法上的意义,它对应于Page里面的帧。
2.    类结构





1)              FrameTree对象用来协助管理父帧和子帧的关系,常见的比如main frame之中有iframe元素,就会调用FrameLoaderClientQt::createFrame来产生子帧,产生的子帧会通过appendChild添加到主帧的树状结构中。Frame通过FrameTree对象,可以方便地访问它的父帧,子帧,兄弟帧。

2)              维护FrameLoader对象用来完成frame的加载,FrameLoader是一个非常重要的类,后续进行进一步的分析。

3)              维护NavigationScheduler对象用来管理页面跳转调度(比如重定向,meta refresh等)。

4)              DOMWindow用来管理同DOM相关的事件、属性和消息。

5)              FrameViwe类用于Frame的排版。

6)              Frame文档解析后,对每一个tag或者attr,会有对应的dom节点关联,Document类用来管理这些dom节点。不同的文档类型继承出不同的子类,比如HTML文档对应子类HTMLDocument,XML文档对应于XMLDocument。

7)              SciptController对象,脚本控制器,用来管理脚本的执行和操作。

8)              Editor对象用来处理页面的编辑相关的操作,比如拷贝,粘贴,输入等,Editor对象,它同Page类的EditorClient对象紧密合作。和EditorClient的关系就如同Page同Frame的关系。

9)              SelectionController用来管理Frame中的选取操作。

10)         AnimationControlle,动画控制,控制动画的播放,暂停,继续(同HTML video标签是否有关系?)

11)         EventHandler,事件处理对象,这里的对象主要是同上层应用也就是用户参与的事件,比如鼠标事件,按键事件(快捷键等),滚动事件,resize事件等。这是一个浏览器外壳经常需要打交道的类。
3.    主要接口
3.1   Create

static PassRefPtr<Frame> create(Page*,HTMLFrameOwnerElement*,FrameLoaderClient*)
描述: 调用Frame构造函数,创建出Frame对象。有两个地方会创建Frame对象,一是要加载一个新的页面请求,这个时候会创建main frame,一是在加载子帧的时候,通过FrameLoaderClientQt的createFrame接口,创建子帧对应的Frame对象,在第一种情况中,HTMLFrameOwnerElement参数为NULL,第二种情况传子帧的父元素。在一个tab页内,main frame会重用。

调用系列:

àQwebPage::setView

àQwebPage::setViewportSize

àQwebPage::mainFrame

àQwebPagePrivate::createMainFrame

àQwebFrameData::QwebFrameData

àFrame::create


àFrameLoader::finishedLoading
à……

àHTMLDocumentParser::append

à……

àHTMLTreeBuilder::processToken

à……

àHTMLElementBase::openURL

àSubFrameLoader::requestFrame

à……

àFrameLoaderClientQt::creatFrame

àQwebFrameData::QwebFrameData

àFrame::create
3.2  createView

void createView(const IntSize&, const Color&, bool, const IntSize&, bool,

            ScrollbarMode = ScrollbarAuto, bool horizontalLock = false,

            ScrollbarMode = ScrollbarAuto, bool verticalLock = false)

描述:创建出FrameView对象,以用于之后的排版。应用调用这个函数的时候需要传入同排版有关的一些信息,如初始视窗大小,背景色,滚动条模式等。创建出FrameView以后,即调用Frame::setView设置成当前的FrameView。
函数调用系列:
àFrameLoader::commitProvisionalLoad

àFrameLoader::transitionToCommitted

àFrameLoaderClientQt::transitionToCommittedForNewPage

àFrame::createView
3.3  setDocument

void setDocument(PassRefPtr<Document>)

描述:设置同Frame关联的Document对象(一般是DocumentWriter创建的)。

函数调用系列:

àQWebFrame::QwebFrame

àQwebFramePrivate::init

àFrame::init

àFrameLoader::init

àDocumentWriter::begin

àFrame::setDocument


àDocumentLoader::receivedData
àDocumentLoader::commitLoad

àFrameLoaderClientQt::committedLoad

àDocumentLoader::commitData

àDocumentWriter::setEncoding

àDocumentWriter::willSetEncoding

àFrameLoader::receivedFirstData

àDocumentWriter::begin

àFrameLoader::clear

àFrame::setDocument
3.4  init

void Frame::init

描述:Frame对象初始化,会调用FrameLoader::init初始化FrameLoader对象。

调用系列:
àQWebFrame::QWebFrame

àQwebFramePrivate::init

àFrame::init
3.5  setPageAndTextZoomFactors

void setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor)

描述:设置页面放大因子和文字放大因子。在网页缩放或者改变网页字体大小的时候调用。
  • 大小: 45.8 KB
分享到:
评论

相关推荐

    WebKit内核源码分析_ALL

    WebKit 内核源码分析_ALL WebKit 内核源码分析是对 WebKit 内核架构的深入分析,主要关注 Frame 类的设计和实现。Frame 类是 WebCore 内核同应用之间联系的一个重要的类,作为 Façade 模式的实现,将内核的各个...

    WebKit内核源代码分析(1)

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

    Webkit内核源代码分析(2)

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

    android webkit 内核

    Android上的WebKit内核则专门针对移动设备进行了优化,以适应小屏幕显示和触摸操作。 **二、Android WebKit架构** Android WebKit由以下几个主要部分组成: 1. **WebView组件**:这是Android应用程序可以直接使用...

    WebKit内核源代码分析3

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

    WebKit内核源代码分析(3)

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

    WebKit内核源代码分析(五)

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

    webKit等内核实现的webBrowser

    本文将深入探讨“webkit”等非IE内核的Web浏览器实现及其优势。 WebKit是一个开源的Web浏览器渲染引擎,广泛应用于苹果的Safari、谷歌的Chrome以及其他许多移动设备上的浏览器。它基于KHTML和KJS库,源自Konqueror...

    webkit内核源代码分析5

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

    .NET webkit为内核的浏览器打开网页源码

    标题提到的".NET webkit为内核的浏览器打开网页源码",主要涉及到的技术点是使用.NET库来展示基于WebKit内核的Web页面,并且能够访问和操作网页的源代码。以下将详细介绍这个主题: 1. **Awesomium和CEFSharp库**:...

    C# webkit为内核的浏览器打开网页源码

    总结起来,C#结合WebKit内核的浏览器开发涉及多个层次的技术,包括WebKit接口的绑定、浏览器控件的使用、网页加载和源码获取、以及可能的HTML解析和用户交互处理。理解并掌握这些知识点是创建功能强大且稳定的浏览器...

    webkit JS引擎深入分析

    ### WebKit JavaScript引擎深入分析 #### 一、概述 **WebKit**是一款开源的浏览器引擎,由Apple公司在2005年发起,旨在提供一个高效、跨平台的网页浏览体验。WebKit不仅仅是一个渲染引擎,它还包含了一系列核心...

    C# webkit为内核的浏览器打开网页源码(0520_).rar

    本资源“C# webkit为内核的浏览器打开网页源码(0520_).rar”聚焦于使用C#语言创建一个基于WebKit内核的浏览器,允许用户查看网页的源代码。WebKit是一个开源的网页渲染引擎,被许多知名浏览器如Safari和Chrome所采用...

    C# webkit为内核的浏览器打开网页源码_0520.rar

    本项目聚焦于使用C#编程语言结合WebKit内核来实现一个能够打开并解析网页源码的浏览器。WebKit是一个开源的渲染引擎,广泛应用于各种操作系统和应用程序中,包括Apple的Safari和Google Chrome的一部分。 在C#中实现...

    关于webkit各种资料的整理

    综上所述,"关于WebKit各种资料的整理"涵盖了WebKit内核的基本构成、编译流程以及源码分析的关键点。通过对这些知识的学习,开发者能够提升自己在Web技术领域的专业素养,更好地适应现代Web开发的需求。

    webkitChrome内核浏览器易语言源码-易语言

    对于想要学习易语言、浏览器开发或是研究Webkit内核的开发者来说,这是一个极具价值的学习材料。通过研究这个源码,不仅可以深入理解易语言的编程机制,还能掌握浏览器开发的关键技术,提升自己的编程能力。

    C# webkit为内核的浏览器打开网页源码.rar

    本项目涉及的是利用C#与WebKit技术创建一个基于WebKit内核的浏览器,能够打开并显示网页的源代码。WebKit是一个开源的浏览器引擎,被许多知名浏览器如Safari和Chrome采用,它提供了强大的网页渲染和JavaScript执行...

    C# webkit为内核的浏览器打开网页源码(0515).rar

    本资源“C# webkit为内核的浏览器打开网页源码(0515).rar”聚焦于利用C#创建一个基于WebKit内核的浏览器,用于查看网页源代码。WebKit是一个开源的渲染引擎,它被Safari、Chrome等流行浏览器所采用,能够快速、准确...

Global site tag (gtag.js) - Google Analytics