现在的位置: 首页 > 综合 > 正文

关于webkit知识

2018年02月15日 ⁄ 综合 ⁄ 共 1017字 ⁄ 字号 评论关闭

1. View之间的上下级关系
   webView(最下层)-->WebFrameView-->WebUIScrollView-->WebHtmlView-->FrameView(最上层)

2. 很多html文件里,会经常用到iFrame标签,而iFrame可以支持页面滚动,特意查看了一下iFrame的显示关系。
   首先,一个WebView对应一个Page,  一个Page由一个或多个Frame组成,有一个主Frame,对应外层的html文件中的<html>标签。当有Ifrmae存在时,Frame会加载subFrame,组成一个Tree的结构。
如: <html><body><iframe src=""></iframe></body></html>.
   如果Frame的m_ownerElement为空,表示主Frame, 如果m_ownerElement不为空,一般指向<iframe>的父节点。

3. Frame主要处理逻辑,会有一个对应的FrameView用于处理Render的显示,由于FrameView会有超过屏幕的情况,所以FrameView一般需要继承自ScrollView类。
   FrameView有一个成员叫: RenderObject* mlayoutRootObject; 用于保存Render树的根节点,同时,FrameView有Render树的layout函数入口。

4. 当Frame遇到有<iframe的时候,会调用CreateFrameWithPage来创新子Frame.(主Frame由CreateMainFrameWithPage函数创建).

5. 每个Frame有一个FrameLoader用于加载数据与图片等资源。
   FrameLoader维护了三个DocumentLoader对象,分别对应于不同的阶段,m_policyDocumentLoader对应于收到用户load调用,进行policy check阶段,m_provisionalDocumentLoader对应于policy check通过以后,Frame数据还没有到来之前,它会负责startLoadingMainResource的调用。m_documentLoader则是Frame第一个数据到来以后使用的DocumentLoader,这个时候,前一个主Frame的DocumentLoader已经不能再用(user
agent开始白屏,刷掉前一个页面的显示)。

抱歉!评论已关闭.