WebKit – WebKit Major Objects

來源:互聯網
上載者:User

http://www.jjos.org/%E4%BA%92%E8%81%94%E7%BD%91/%E6%B5%8F%E8%A7%88%E5%99%A8/2010/05/10/308_webkit-webkit-major-objects.html

WebCore在載入並且顯示一張頁面時,會建立許多的對象與頁面中的各個元素相互對應。這些對象之間的關係,以及由誰來建立並且管理的呢?對於不同的MIME類型的頁面(比如HTML,XHTML,XML)又是如何區分的呢?Javascript指令碼中是如何訪問這些HTML元素的呢?CSS屬性又是如何影響到各個元素的繪製的呢?帶著這些問題,對WebKit引擎進行Hacking。當GTKLauncher啟動後,建立的第一個WebCore對象是WebCore::Page對象,該對象從負責的功能上並不等同於一張載入的Web頁面,而是可以將該對象看成是一次瀏覽會話。WebCore::Page包含了Chrome對象(例如:JS可以通過該對象使瀏覽器彈出提示框),瀏覽器設定(Settings),RenderTheme對象、History對象,以及Frame對象。這些對象在一次瀏覽會話過程中只會建立一次,也就是說不管在一次會話中發生多少次頁面跳轉,對象是不會被銷毀的,只有當瀏覽器退出時才會銷毀這些對象。Frame對象與頁面載和顯示有關,他主要管理資源的載入(由FrameLoader負責),以及內容呈現(由FrameView負責)。Frame對象中儲存了兩個比較重要的對象Document(描述DOM樹)和DOMWindow。DOMWindow可以看成是頁面顯示的視窗,Javascript中可以通過JSDOMWindow來訪問該對象。因為DOMWindow中儲存了建立它的Frame的引用,因此JSDOMWindow可以通過該對象找到當前Frame所擁有的Document對象。Document對象是DOM樹的根節點,所有的子節點都可以從其遍曆到。並且,當使用者點擊頁面中的某個串連,或者當滑鼠滑過某個有焦點響應函數的元素時,Document對象第一個接收到該事件,然後通過起泡演算法找到目標對象並響應,然後從目標對象開始反向調用父元素的處理函數。在webCore中定義了9個主要的文檔對象,用來處理不同的文件類型。比如”text/hml”類型的文檔是通過HTMLDocument對象描述的,”image/svg+xml”則是由SVGDocument對象描述的,”application/xhtml+xml”則由Document描述。Document對象,根據接收到的不同的MIME類型資料,建立不同的文檔對象,並且由各自的文檔對象建立其文檔解析器。這裡以”text/html”類型的文檔為例說明其關係。當使用者訪問指定URL時,FrameLoader會調用DocumentLoader載入資源(網路或者本地),當頁面第一次被載入時,會通知FrameLoader,並且調用其begin方法。該方法會根據接收資料的MIME類型建立不同的文檔對象,在這裡會建立HTMLDocument對象。並且由HTMLDocument對象建立一個HTMLParser用來繼續下面的文檔解析工作。當FrameLoader再次接受到頁面資料時,對象的addData方法會被調用,該方法會訪問Document的parser對象,並且將獲得的資料通過Parser解析。HTMLParser碰到一個元素Tag時,會通過HTMLElementFactory建立響應的HTML*元素,來描述該元素。通過閱讀源碼可以知道,所有的HTML*元素都是繼承於HTMLElement,而HTMLElement並不是直接繼承與Node對象的,相反它是StyledElement類的子類,因此CSSParser在解析CSS元素時,可以直接存取和設定HTML*元素的屬性。而StyleedElement則是繼承與Element類。我們知道,所有的Element元素都是EventTarget的子類,因此HTML*元素都可以接收到DOM事件。WebKit運行時主要對象關係圖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.