Frame应该是整个webcore里面最核心的对象之一,前面在讲Page对象的文章中,也提到过,从Page的角度来看,其实一个Page就是由一个或者多个Frame构成,而这些Frame是以树状的关系组织,我们来看一段HTML代码

[css] view plaincopy

  1. <html>
  2. <body>
  3. hello, everyone!
  4. <iframe src="..."/>
  5. <iframe src ="..."/>
  6. </body>
  7. </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对象分析相关推荐

  1. OpenCV中MeanShift算法视频移动对象分析

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 MeanShift算法 Mean Shift是一种聚类算法,在数据 ...

  2. 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

    文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...

  3. erp物料报废 oracle_ERP核心业务流程和Oracle-ERP业务和数据对象分析

    作者:人月神话,新浪博客同名 简介:多年SOA规划建设,私有云PaaS平台架构设计经验,长期从事一线项目实践 今天简单整理下原来整理过的ERP核心业务流程和Oracle-ERP核心业务功能和数据对象分 ...

  4. jmap, jhat, jvisualvm:java堆内存对象分析利器

    转载自 jmap, jhat, jvisualvm:java堆内存对象分析利器 jmap -help查看命令用法. jmap -heap <pid> 查看堆使用情况. jmap -dump ...

  5. 简述oracle的主要数据库对象,Oracle数据库数据对象分析

    Oracle数据库数据对象分析 Oracle数据库数据对象中最基本的是表和视图,其他还有约束.序列.函数.存储过程.包.触发器等.对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数 ...

  6. 二、MyBatis常用对象分析 封装工具类

    1.0 MyBatis 对象分析 (1) Resources 类 Resources 类,顾名思义就是资源,用于读取资源文件.其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象. (2) ...

  7. ERP核心业务流程和Oracle-ERP业务和数据对象分析

    ERP核心业务流程和Oracle-ERP业务和数据对象分析 https://www.toutiao.com/i6869658665129869832/?tt_from=weixin&utm_c ...

  8. js 操作frameset frame 对象

    js 操作frameset frame 对象 框架编程概述 一个HTML页面可以有一个或多个子框架,这些子框架以<iframe>来标记,用来显示一个独立的HTML页面.这里所讲的框架编程包 ...

  9. Redis教程:数据对象分析(一)

    目录 1 五种基本数据对象 2 数据结构对象分析 2.1 类型 2.2 编码与底层实现 2.3 编码转换 1 五种基本数据对象 图1 redis数据对象 2 数据结构对象分析 Redis中的每个对象都 ...

最新文章

  1. PHP分布式链路追踪,SkyWalking:分布式架构链路追踪-SkyWalking介绍
  2. mqtt session保持 订阅消息_如何使用 MQTT 报文实现发布订阅功能
  3. Kanzi常用操作2
  4. k8s存储卷(empyDir;hostPath;nfs)
  5. php云和骑士哪家好,PHP云人才系统与骑士cms人才系统对比点评
  6. 双十一,没有买卖就没有伤害!
  7. git批量删除文件和批量提交
  8. 用C语言实现面向对象的开发
  9. centos so查看_照片信息查看器app安卓下载-照片信息查看器app下载v1.1.0 安卓版
  10. 区块链技术用解决拜占庭将军问题_区块链是如何解决拜占庭将军问题的?
  11. 多项式之和 Sn=a+aa+aaa+aaaa+.....+aaa.....aa(n个a)
  12. HUT-XXXX 数学
  13. TListView列表拒绝添加重复信息
  14. Linux下安装qt5步骤
  15. 电脑远程vps时无法复制粘贴怎么办
  16. C++数论库:NTL
  17. phpmywind目录结构
  18. 远道知学院| 名下有很多子公司,每个都要独立申请知识产权吗?
  19. 一只纯白小菜鸡是如何走上嵌入式学习这条道路的
  20. 手机唯一标识IMEI以及与IMSI的区别

热门文章

  1. OSX 10.8+下开启Web 共享 的方法
  2. Git SSH Key 生成步骤
  3. daterangepicker 日期范围插件自定义 可选 年份
  4. UVa 1609 (博弈) Foul Play
  5. 清橙 A1120 拦截导弹 -- 动态规划(最长上升子序列)
  6. 手把手教你在ubuntu上安装LAMP
  7. mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
  8. SVN专题(Visual SVN Server + TortoiseSVN + Visual SVN)
  9. npm run mock | npm run dev只能启动一个
  10. linux查看文件和文件夹大小