WebKit Frame对象分析
Frame应该是整个webcore里面最核心的对象之一,前面在讲Page对象的文章中,也提到过,从Page的角度来看,其实一个Page就是由一个或者多个Frame构成,而这些Frame是以树状的关系组织,我们来看一段HTML代码
- <html>
- <body>
- hello, everyone!
- <iframe src="..."/>
- <iframe src ="..."/>
- </body>
- </html>
在以上的html代码中,一个Page里面就会有三个Frame,首先任何一个Page都会至少对应一个Frame,也就是rootFrame,这个Frame不对应iframe节点(Frame中的m_ownerElement对象为空),也是frame树的根节点,还有两个iframe标签对应两个Frame,如果在iframe的属性src里面指定的页面中还含有iframe标签的话,那么也会对应一个frame(一个iframe标签对应一个frame),这样frame之间就形成了父子关系
以下是Frame的一个类图关系
其中有很多非常重要的对象,下面我们挑出几个来分析
1. Page
Page前面文章中已经提到过。这里表示Frame所在的Page是哪个
2. EventHander
事件处理者,我们在网页上(确切的说是在一个frame上)点击一个按钮,或者移动鼠标,首先底层会将该事件截获然后报给WebView(Page专题中有提到),然后通过Page找到RootFrame,将该事件交给RootFrame的EventHandler,RootFrame的EventHandler如果发现其所在Frame有subFrame,会交给subFrame的EventHandler来处理,如果处理成功就返回,否则自己继续处理。
3.FrameView
FrameView对应着一个Frame的显示,这个数据结构也是与render引擎连接的纽带,该结构里面有一个非常重要的接口,叫layout, 接口里面的内容就是render dom树的过程。也有一个非常重要的数据成员 RenderObject* mlayoutRootObject;表示render树的根节点.
在32平台FrameView是继承自ScrollableView
4.ScriptController
脚本相关操作的入口,我们知道,一个页面可以执行很多js函数,这个结构就是与js脚本相关的一个对象。
5 Document
表示一个文档,一个html页面解析完成,会形成一个dom树(相关的知识请看dom规范),该结构就是表示html页面解析完成后的结构,每个标签都会在document上对应一个节点,这也是非常核心的一个数据结构,从MVC的角度来看,应该是M部分。
6 DOMWindow
在bom规范中,js可以访问一个对象,window(bom规范定义了一系列的标准接口),通过该window的接口,js用户可以动态的控制页面的内容,DOMWindow就是表示那个window接口的实现,用一个UML的图来表示,可以表示成如下
7. FrameLoader
页面加载器,与页面相关的加载都由其负责,里面又包含了很多其他的对象,这也是非常重要的一个对象,后面会专门讨论。
WebKit Frame对象分析相关推荐
- OpenCV中MeanShift算法视频移动对象分析
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 MeanShift算法 Mean Shift是一种聚类算法,在数据 ...
- 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )
文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...
- erp物料报废 oracle_ERP核心业务流程和Oracle-ERP业务和数据对象分析
作者:人月神话,新浪博客同名 简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践 今天简单整理下原来整理过的ERP核心业务流程和Oracle-ERP核心业务功能和数据对象分 ...
- jmap, jhat, jvisualvm:java堆内存对象分析利器
转载自 jmap, jhat, jvisualvm:java堆内存对象分析利器 jmap -help查看命令用法. jmap -heap <pid> 查看堆使用情况. jmap -dump ...
- 简述oracle的主要数据库对象,Oracle数据库数据对象分析
Oracle数据库数据对象分析 Oracle数据库数据对象中最基本的是表和视图,其他还有约束.序列.函数.存储过程.包.触发器等.对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数 ...
- 二、MyBatis常用对象分析 封装工具类
1.0 MyBatis 对象分析 (1) Resources 类 Resources 类,顾名思义就是资源,用于读取资源文件.其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象. (2) ...
- ERP核心业务流程和Oracle-ERP业务和数据对象分析
ERP核心业务流程和Oracle-ERP业务和数据对象分析 https://www.toutiao.com/i6869658665129869832/?tt_from=weixin&utm_c ...
- js 操作frameset frame 对象
js 操作frameset frame 对象 框架编程概述 一个HTML页面可以有一个或多个子框架,这些子框架以<iframe>来标记,用来显示一个独立的HTML页面.这里所讲的框架编程包 ...
- Redis教程:数据对象分析(一)
目录 1 五种基本数据对象 2 数据结构对象分析 2.1 类型 2.2 编码与底层实现 2.3 编码转换 1 五种基本数据对象 图1 redis数据对象 2 数据结构对象分析 Redis中的每个对象都 ...
最新文章
- PHP分布式链路追踪,SkyWalking:分布式架构链路追踪-SkyWalking介绍
- mqtt session保持 订阅消息_如何使用 MQTT 报文实现发布订阅功能
- Kanzi常用操作2
- k8s存储卷(empyDir;hostPath;nfs)
- php云和骑士哪家好,PHP云人才系统与骑士cms人才系统对比点评
- 双十一,没有买卖就没有伤害!
- git批量删除文件和批量提交
- 用C语言实现面向对象的开发
- centos so查看_照片信息查看器app安卓下载-照片信息查看器app下载v1.1.0 安卓版
- 区块链技术用解决拜占庭将军问题_区块链是如何解决拜占庭将军问题的?
- 多项式之和 Sn=a+aa+aaa+aaaa+.....+aaa.....aa(n个a)
- HUT-XXXX 数学
- TListView列表拒绝添加重复信息
- Linux下安装qt5步骤
- 电脑远程vps时无法复制粘贴怎么办
- C++数论库:NTL
- phpmywind目录结构
- 远道知学院| 名下有很多子公司,每个都要独立申请知识产权吗?
- 一只纯白小菜鸡是如何走上嵌入式学习这条道路的
- 手机唯一标识IMEI以及与IMSI的区别
热门文章
- OSX 10.8+下开启Web 共享 的方法
- Git SSH Key 生成步骤
- daterangepicker 日期范围插件自定义 可选 年份
- UVa 1609 (博弈) Foul Play
- 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)
- 手把手教你在ubuntu上安装LAMP
- mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
- SVN专题(Visual SVN Server + TortoiseSVN + Visual SVN)
- npm run mock | npm run dev只能启动一个
- linux查看文件和文件夹大小