WebKit Frame对象分析
Frame應該是整個webcore里面最核心的對象之一,前面在講Page對象的文章中,也提到過,從Page的角度來看,其實一個Page就是由一個或者多個Frame構成,而這些Frame是以樹狀的關系組織,我們來看一段HTML代碼
[css]?view plaincopy
在以上的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
頁面加載器,與頁面相關的加載都由其負責,里面又包含了很多其他的對象,這也是非常重要的一個對象,后面會專門討論。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的WebKit Frame对象分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebKit Page对象的分析
- 下一篇: 浅谈WebKit之WebCore