乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      WebKit內(nèi)核源碼分析(一)

       My鏡像站 2011-12-26

       

      摘要:本系列通過分析WebKit的源代碼,試圖分析WebKit的內(nèi)核設(shè)計(jì)架構(gòu),模塊之間的關(guān)系,分析的時(shí)候以Qt的移植為參考,涉及移植的東西不多,主要還是以內(nèi)核為主。在分析內(nèi)核的時(shí)候,Frame是首當(dāng)其沖的一個(gè)類,本文將分析Frame類的代碼。

      1.    描述

      Frame類是WebCore內(nèi)核同應(yīng)用之間聯(lián)系的一個(gè)重要的類。它有點(diǎn)像設(shè)計(jì)模式中的Fa?ade,將內(nèi)核的各個(gè)不同的零配件組裝在了一起,但又不是Fa?ade,因?yàn)橛脩艉芏鄷r(shí)候還是要直接去操作里面的組件。除了設(shè)計(jì)上的考慮,Frame還有語法上的意義,它對(duì)應(yīng)于Page里面的幀。

      2.    類結(jié)構(gòu)

       

       

      1)              FrameTree對(duì)象用來協(xié)助管理父幀和子幀的關(guān)系,常見的比如main frame之中有iframe元素,就會(huì)調(diào)用FrameLoaderClientQt::createFrame來產(chǎn)生子幀,產(chǎn)生的子幀會(huì)通過appendChild添加到主幀的樹狀結(jié)構(gòu)中。Frame通過FrameTree對(duì)象,可以方便地訪問它的父幀,子幀,兄弟幀。

      2)              維護(hù)FrameLoader對(duì)象用來完成frame的加載,FrameLoader是一個(gè)非常重要的類,后續(xù)進(jìn)行進(jìn)一步的分析。

      3)              維護(hù)NavigationScheduler對(duì)象用來管理頁面跳轉(zhuǎn)調(diào)度(比如重定向,meta refresh等)。

      4)              DOMWindow用來管理同DOM相關(guān)的事件、屬性和消息。

      5)              FrameViwe類用于Frame的排版。

      6)              Frame文檔解析后,對(duì)每一個(gè)tag或者attr,會(huì)有對(duì)應(yīng)的dom節(jié)點(diǎn)關(guān)聯(lián),Document類用來管理這些dom節(jié)點(diǎn)。不同的文檔類型繼承出不同的子類,比如HTML文檔對(duì)應(yīng)子類HTMLDocument,XML文檔對(duì)應(yīng)于XMLDocument。

      7)              SciptController對(duì)象,腳本控制器,用來管理腳本的執(zhí)行和操作。

      8)              Editor對(duì)象用來處理頁面的編輯相關(guān)的操作,比如拷貝,粘貼,輸入等,Editor對(duì)象,它同Page類的EditorClient對(duì)象緊密合作。和EditorClient的關(guān)系就如同PageFrame的關(guān)系。

      9)              SelectionController用來管理Frame中的選取操作。

      10)         AnimationControlle,動(dòng)畫控制,控制動(dòng)畫的播放,暫停,繼續(xù)(同HTML video標(biāo)簽是否有關(guān)系?)

      11)         EventHandler,事件處理對(duì)象,這里的對(duì)象主要是同上層應(yīng)用也就是用戶參與的事件,比如鼠標(biāo)事件,按鍵事件(快捷鍵等),滾動(dòng)事件,resize事件等。這是一個(gè)瀏覽器外殼經(jīng)常需要打交道的類。

      3.    主要接口

      3.1   Create

      static PassRefPtr<Frame> create(Page*,HTMLFrameOwnerElement*,FrameLoaderClient*)
      描述: 調(diào)用Frame構(gòu)造函數(shù),創(chuàng)建出Frame對(duì)象。有兩個(gè)地方會(huì)創(chuàng)建Frame對(duì)象,一是要加載一個(gè)新的頁面請(qǐng)求,這個(gè)時(shí)候會(huì)創(chuàng)建main frame,一是在加載子幀的時(shí)候,通過FrameLoaderClientQtcreateFrame接口,創(chuàng)建子幀對(duì)應(yīng)的Frame對(duì)象,在第一種情況中,HTMLFrameOwnerElement參數(shù)為NULL,第二種情況傳子幀的父元素。在一個(gè)tab頁內(nèi),main frame會(huì)重用。

      調(diào)用系列:

      àQwebPage::setView

      àQwebPage::setViewportSize

      àQwebPage::mainFrame

      àQwebPagePrivate::createMainFrame

      àQwebFrameData::QwebFrameData

      àFrame::create


      àFrameLoader::finishedLoading
      à……

      àHTMLDocumentParser::append

      à……

      àHTMLTreeBuilder::processToken

      à……

      àHTMLElementBase::openURL

      àSubFrameLoader::requestFrame

      à……

      àFrameLoaderClientQt::creatFrame

      àQwebFrameData::QwebFrameData

      àFrame::create

      3.2  createView

      void createView(const IntSize&, const Color&, bool, const IntSize&, bool,

                  ScrollbarMode = ScrollbarAuto, bool horizontalLock = false,

                  ScrollbarMode = ScrollbarAuto, bool verticalLock = false)

      描述:創(chuàng)建出FrameView對(duì)象,以用于之后的排版。應(yīng)用調(diào)用這個(gè)函數(shù)的時(shí)候需要傳入同排版有關(guān)的一些信息,如初始視窗大小,背景色,滾動(dòng)條模式等。創(chuàng)建出FrameView以后,即調(diào)用Frame::setView設(shè)置成當(dāng)前的FrameView
      函數(shù)調(diào)用系列:
      àFrameLoader::commitProvisionalLoad

      àFrameLoader::transitionToCommitted

      àFrameLoaderClientQt::transitionToCommittedForNewPage

      àFrame::createView

      3.3  setDocument

      void setDocument(PassRefPtr<Document>)

      描述:設(shè)置同Frame關(guān)聯(lián)的Document對(duì)象(一般是DocumentWriter創(chuàng)建的)。

      函數(shù)調(diào)用系列:

      àQWebFrame::QwebFrame

      àQwebFramePrivate::init

      àFrame::init

      àFrameLoader::init

      àDocumentWriter::begin

      àFrame::setDocument


      àDocumentLoader::receivedData
      àDocumentLoader::commitLoad

      àFrameLoaderClientQt::committedLoad

      àDocumentLoader::commitData

      àDocumentWriter::setEncoding

      àDocumentWriter::willSetEncoding

      àFrameLoader::receivedFirstData

      àDocumentWriter::begin

      àFrameLoader::clear

      àFrame::setDocument

      3.4  init

      void Frame::init

      描述:Frame對(duì)象初始化,會(huì)調(diào)用FrameLoader::init初始化FrameLoader對(duì)象。

      調(diào)用系列:
      àQWebFrame::QWebFrame

      àQwebFramePrivate::init

      àFrame::init

      3.5  setPageAndTextZoomFactors

      void setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor)

      描述:設(shè)置頁面放大因子和文字放大因子。在網(wǎng)頁縮放或者改變網(wǎng)頁字體大小的時(shí)候調(diào)用。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多