webkit中 Frame對象分析
Frame應該是整個webcore里面最核心的對象之一,前面在講Page對象的文章中,也提到過,從Page的角度來看,其實一個Page就是由一個或者多個Frame構成,而這些Frame是以樹狀的關系組織,我們來看一段HTML代碼
- <html>
- <body>
- hello,everyone!
- <iframesrc= "..." />
- <iframesrc= "..." />
- </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
頁面加載器,與頁面相關的加載都由其負責,里面又包含了很多其他的對象,這也是非常重要的一個對象,后面會專門討論。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
