正文

Internet Explorer體系結(jié)構(gòu)(11)

IE8 & 9開發(fā)實(shí)戰(zhàn):基于下一代IE的應(yīng)用開發(fā) 作者:(美)克羅利


  

托管MSHTML的應(yīng)用程序和對(duì)象并不僅限于IE框架和WebBrowser控件。由于所有功能都包裝在活動(dòng)文檔對(duì)象中,所以任何有效的“文檔宿主程序”都可以加載、顯示和控制Trident。

Trident本身可以看作一個(gè)容器,其中容納了緊密連接在一起的子系統(tǒng),每個(gè)子系統(tǒng)都有自己的角色、功能,而且在大多數(shù)情況下,都有一組公開的公共界面(見圖1-20)。

圖1-20  Trident體系結(jié)構(gòu)圖

Trident使用標(biāo)記和擴(kuò)展,并在很多核心子系統(tǒng)中執(zhí)行涉及這些標(biāo)記與擴(kuò)展的命令。盡管這個(gè)框圖中標(biāo)出了MSHTML的主要范圍,但仍然有一些由IE及其設(shè)計(jì)所獨(dú)有的私有組件未在這里給出。

1.5.1  分析器子系統(tǒng)

分析器負(fù)責(zé)讀取、標(biāo)記(tokenize)和分析供其他引擎組件使用的標(biāo)記(markup)。分析器的第一級(jí)稱為預(yù)分析器。在收到一個(gè)文檔時(shí),內(nèi)部類對(duì)文本進(jìn)行解碼。然后使用內(nèi)部標(biāo)記器(tokenizer)將解碼后的文本轉(zhuǎn)換為標(biāo)記流。

當(dāng)預(yù)分析器在文本流中讀取信息時(shí),IE通過(guò)一個(gè)先行下載器傳送該信息。這一功能掃描在后面分析過(guò)程中可能用到的資源URL(例如CSS和JavaScript腳本)。由于在等待下載相關(guān)文件時(shí)可能會(huì)明顯降低渲染速度,所以盡快確認(rèn)并請(qǐng)求這些資源是非常重要的。當(dāng)找到候選URL時(shí),將這個(gè)URL添加到網(wǎng)絡(luò)請(qǐng)求隊(duì)列中。這種預(yù)下載機(jī)制(有時(shí)也稱為“推測(cè)下載”)有助于在最大限度上縮短Trident在等待下載相關(guān)項(xiàng)上花費(fèi)的時(shí)間。

在進(jìn)行解碼和標(biāo)記之后,主分析器從流中讀取元素,并為整個(gè)HTML文檔做準(zhǔn)備。將會(huì)創(chuàng)建樹節(jié)點(diǎn)和標(biāo)記,標(biāo)記流傳送給核心文檔子系統(tǒng)。

1.5.2  文檔模式和兼容性視圖

兼容性視圖是IE布局引擎的一種模式,可以像在低版本IE中一樣渲染和顯示網(wǎng)頁(yè);這些版本稱為“文檔模式”。兼容性視圖可以通過(guò)HTTP頭、網(wǎng)頁(yè)、用戶界面或者兼容性列表來(lái)啟動(dòng)。

1.5.3  核心文檔子系統(tǒng)

標(biāo)記通過(guò)分析器之后,傳送給“核心文檔子系統(tǒng)”,也稱為“標(biāo)記服務(wù)”。這一部分Trident獲取經(jīng)過(guò)分析的標(biāo)記后,構(gòu)建標(biāo)記流,并為使用和轉(zhuǎn)換做一些準(zhǔn)備工作,以將其轉(zhuǎn)換為對(duì)象模型。通過(guò)標(biāo)記服務(wù)API可以看到這一子系統(tǒng)的公共實(shí)現(xiàn),這一實(shí)現(xiàn)通過(guò)IMarkupServices界面公開。在構(gòu)造了標(biāo)記流之后,就將其傳送給其他Trident子系統(tǒng)。

注意:

盡管標(biāo)記最終是由對(duì)象模型子系統(tǒng)放置在一個(gè)樹狀結(jié)構(gòu)中,但存在一種很普遍的誤解:是IE的分析器創(chuàng)建了一個(gè)文檔“樹”。標(biāo)記服務(wù)創(chuàng)建了一種經(jīng)過(guò)優(yōu)化的專用文本流,以便于Trident的其余部分使用。如需更多信息,請(qǐng)查看MSDN中的IMarkupServices文檔和文章。

1.5.4  文本、布局和渲染子系統(tǒng)

文本、布局和渲染子系統(tǒng)是一組內(nèi)容非常廣泛的內(nèi)部界面,負(fù)責(zé)在屏幕和打印紙張上定位和顯示內(nèi)容。

文本引擎負(fù)責(zé)存儲(chǔ)和顯示信息,包括將文本塊傳送給相關(guān)子系統(tǒng),例如編輯和布局。

布局引擎是一組算法,負(fù)責(zé)收集信息、構(gòu)建數(shù)據(jù)結(jié)構(gòu)和將大小和定位信息輸出到呈現(xiàn)引擎。盡管沒有與這個(gè)塊相關(guān)聯(lián)的公開界面,但在內(nèi)部是知道它的,有時(shí)在一些博客中稱為“頁(yè)面、表格和線條服務(wù)”(PTLS)。

渲染引擎負(fù)責(zé)在屏幕上顯示網(wǎng)頁(yè)。它從布局引擎接收內(nèi)容大小和定位信息,從腳本及二進(jìn)制行為中接收自定義元素或元素效果定義,將這些內(nèi)容的解釋渲染在屏幕上。

1.5.5  對(duì)象模型子系統(tǒng)

這個(gè)對(duì)象模型在較高層次上,控制對(duì)文檔元素進(jìn)行分析之后與其進(jìn)行的通信。它將分析器發(fā)現(xiàn)的文檔元素綁定到腳本引擎,以支持動(dòng)態(tài)HTML內(nèi)容。


上一章目錄下一章

Copyright ? 讀書網(wǎng) leeflamesbasketballcamps.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)