要:本系列通过分析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 内核源码分析是对 WebKit 内核架构的深入分析,主要关注 Frame 类的设计和实现。Frame 类是 WebCore 内核同应用之间联系的一个重要的类,作为 Façade 模式的实现,将内核的各个...
本系列通过分析WebKit的源代码,试图分析WebKit的内核设计架构,模块之间的关系,分析的时候以QT的移植为参考,涉及移植的东西不多,主要还是以内核为主。在分析内核的时候,Frame是首当其冲的一个类,本文将分析...
本系列通过分析WebKit的源代码,试图分析WebKit的内核设计架构,模块之间的关系,分析时以QT的移植为参考,涉及移植的东西不多,主要还是以内核为主。FrameLoader类负责一个Frame的加载,在Frame的流程中起到非常...
Android上的WebKit内核则专门针对移动设备进行了优化,以适应小屏幕显示和触摸操作。 **二、Android WebKit架构** Android WebKit由以下几个主要部分组成: 1. **WebView组件**:这是Android应用程序可以直接使用...
《WebKit内核源代码分析3》是一篇深入探讨WebKit内核设计与架构的专题文章,主要聚焦于WebKit的源码解析,尤其是针对Qt平台的移植。尽管移植内容不是重点,但这一系列文章的核心仍然是WebKit内核本身。WebKit是全球...
浏览器的请求一般是以页面请求为单位,当用户通过网址栏输入一个url,浏览器就开始一个页面请求。而一个页面请求可能包含有一个到多个页面子帧,...Page类是WebKit中非常重要的一个类,它就象内核对外的一个聚合器。
### WebKit内核源代码分析:深入理解Android中的WebKit #### 概述 在现代移动设备上,浏览器作为用户访问互联网的主要入口,其性能和稳定性至关重要。WebKit是苹果公司在Safari浏览器中使用的开源渲染引擎,它不仅...
本文将深入探讨“webkit”等非IE内核的Web浏览器实现及其优势。 WebKit是一个开源的Web浏览器渲染引擎,广泛应用于苹果的Safari、谷歌的Chrome以及其他许多移动设备上的浏览器。它基于KHTML和KJS库,源自Konqueror...
### WebKit内核源代码分析第五篇:HTML解析与DOM构建 #### 一、HTML解析器与DOM构建 在WebKit的内核设计架构中,HTML文档的解析与DOM树的构建是极其重要的环节。这部分内容涉及到WebKit如何处理HTML文档,并将其...
标题提到的".NET webkit为内核的浏览器打开网页源码",主要涉及到的技术点是使用.NET库来展示基于WebKit内核的Web页面,并且能够访问和操作网页的源代码。以下将详细介绍这个主题: 1. **Awesomium和CEFSharp库**:...
总结起来,C#结合WebKit内核的浏览器开发涉及多个层次的技术,包括WebKit接口的绑定、浏览器控件的使用、网页加载和源码获取、以及可能的HTML解析和用户交互处理。理解并掌握这些知识点是创建功能强大且稳定的浏览器...
### WebKit JavaScript引擎深入分析 #### 一、概述 **WebKit**是一款开源的浏览器引擎,由Apple公司在2005年发起,旨在提供一个高效、跨平台的网页浏览体验。WebKit不仅仅是一个渲染引擎,它还包含了一系列核心...
对于想要学习易语言、浏览器开发或是研究Webkit内核的开发者来说,这是一个极具价值的学习材料。通过研究这个源码,不仅可以深入理解易语言的编程机制,还能掌握浏览器开发的关键技术,提升自己的编程能力。
本资源“C# webkit为内核的浏览器打开网页源码(0520_).rar”聚焦于使用C#语言创建一个基于WebKit内核的浏览器,允许用户查看网页的源代码。WebKit是一个开源的网页渲染引擎,被许多知名浏览器如Safari和Chrome所采用...
### WebKit和Chromium源码及原理剖析 #### 第1篇 Web开发须知的浏览器内幕:缓存与存储篇(2) **3. HTTP Cache综述** - **HTTP Cache概念**: - HTTP缓存机制遵循IETF规范设计,最新的标准文档为[RFC 7234]...
本项目聚焦于使用C#编程语言结合WebKit内核来实现一个能够打开并解析网页源码的浏览器。WebKit是一个开源的渲染引擎,广泛应用于各种操作系统和应用程序中,包括Apple的Safari和Google Chrome的一部分。 在C#中实现...
综上所述,"关于WebKit各种资料的整理"涵盖了WebKit内核的基本构成、编译流程以及源码分析的关键点。通过对这些知识的学习,开发者能够提升自己在Web技术领域的专业素养,更好地适应现代Web开发的需求。
本项目涉及的是利用C#与WebKit技术创建一个基于WebKit内核的浏览器,能够打开并显示网页的源代码。WebKit是一个开源的浏览器引擎,被许多知名浏览器如Safari和Chrome采用,它提供了强大的网页渲染和JavaScript执行...