WebKit Frame对象分析
Frame應(yīng)該是整個webcore里面最核心的對象之一,前面在講Page對象的文章中,也提到過,從Page的角度來看,其實一個Page就是由一個或者多個Frame構(gòu)成,而這些Frame是以樹狀的關(guān)系組織,我們來看一段HTML代碼
[css]?view plaincopy
在以上的html代碼中,一個Page里面就會有三個Frame,首先任何一個Page都會至少對應(yīng)一個Frame,也就是rootFrame,這個Frame不對應(yīng)iframe節(jié)點(Frame中的m_ownerElement對象為空),也是frame樹的根節(jié)點,還有兩個iframe標(biāo)簽對應(yīng)兩個Frame,如果在iframe的屬性src里面指定的頁面中還含有iframe標(biāo)簽的話,那么也會對應(yīng)一個frame(一個iframe標(biāo)簽對應(yīng)一個frame),這樣frame之間就形成了父子關(guān)系
以下是Frame的一個類圖關(guān)系
?
其中有很多非常重要的對象,下面我們挑出幾個來分析
1. Page
Page前面文章中已經(jīng)提到過。這里表示Frame所在的Page是哪個
2. EventHander
事件處理者,我們在網(wǎng)頁上(確切的說是在一個frame上)點擊一個按鈕,或者移動鼠標(biāo),首先底層會將該事件截獲然后報給WebView(Page專題中有提到),然后通過Page找到RootFrame,將該事件交給RootFrame的EventHandler,RootFrame的EventHandler如果發(fā)現(xiàn)其所在Frame有subFrame,會交給subFrame的EventHandler來處理,如果處理成功就返回,否則自己繼續(xù)處理。
3.FrameView
FrameView對應(yīng)著一個Frame的顯示,這個數(shù)據(jù)結(jié)構(gòu)也是與render引擎連接的紐帶,該結(jié)構(gòu)里面有一個非常重要的接口,叫layout, 接口里面的內(nèi)容就是render dom樹的過程。也有一個非常重要的數(shù)據(jù)成員 RenderObject* mlayoutRootObject;表示render樹的根節(jié)點.
在32平臺FrameView是繼承自ScrollableView
4.ScriptController
腳本相關(guān)操作的入口,我們知道,一個頁面可以執(zhí)行很多js函數(shù),這個結(jié)構(gòu)就是與js腳本相關(guān)的一個對象。
5 Document
表示一個文檔,一個html頁面解析完成,會形成一個dom樹(相關(guān)的知識請看dom規(guī)范),該結(jié)構(gòu)就是表示html頁面解析完成后的結(jié)構(gòu),每個標(biāo)簽都會在document上對應(yīng)一個節(jié)點,這也是非常核心的一個數(shù)據(jù)結(jié)構(gòu),從MVC的角度來看,應(yīng)該是M部分。
6 DOMWindow
?在bom規(guī)范中,js可以訪問一個對象,window(bom規(guī)范定義了一系列的標(biāo)準(zhǔn)接口),通過該window的接口,js用戶可以動態(tài)的控制頁面的內(nèi)容,DOMWindow就是表示那個window接口的實現(xiàn),用一個UML的圖來表示,可以表示成如下
7. FrameLoader
頁面加載器,與頁面相關(guān)的加載都由其負(fù)責(zé),里面又包含了很多其他的對象,這也是非常重要的一個對象,后面會專門討論。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的WebKit Frame对象分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebKit Page对象的分析
- 下一篇: 浅谈WebKit之WebCore