正文

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

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


  

1. IE動態(tài)HTML對象模型和W3C文檔對象模型

IE動態(tài)HTML對象模型(DHTML OM)向外部界面公開內(nèi)部元素構(gòu)造,使開發(fā)人員能夠以編程方式,從腳本和二進(jìn)制應(yīng)用程序中訪問元素的屬性、方法和事件。

W3C文檔對象模型(DOM)是一種具有互操作性能的平臺中性對象模型實(shí)現(xiàn),創(chuàng)建這一模型的目的是使對象模型實(shí)現(xiàn)符合標(biāo)準(zhǔn),能夠跨主流瀏覽器使用。W3C DOM可以通過JavaScript訪問,并在很多現(xiàn)有IE DHTML DOM界面的上層實(shí)現(xiàn)。

IE DHTML OM和W3C DOM盡管都能精確地表示文檔對象,但在本質(zhì)上是不同的。W3C DOM為開發(fā)人員提供了一種更簡單的方法,可以用來處理文檔、改變屬性和生成能夠跨多種瀏覽器和平臺工作的應(yīng)用程序。DHTML OM的一些方法,例如事件(eventing),沒有通過W3C DOM公開。

2. 腳本引擎界面(JScript.dll,VBScript.dll)

對任何實(shí)現(xiàn)IActiveScript和IActiveScriptParse的腳本引擎,Trident都可以用作腳本宿主程序(實(shí)現(xiàn)IActiveScriptSite和IActiveScriptSiteWindow)。開發(fā)人員大多是通過Trident來使用JavaScript (JScript.dll)和VBScript (VBScript.dll);但是,它能夠加載任何實(shí)現(xiàn)這些活動腳本界面的腳本引擎。

早在對一個頁面進(jìn)行首次分析時,就能實(shí)例化腳本引擎;它們通常需要在第一次響應(yīng)之后馬上計算文檔中的變化。當(dāng)Trident定位一個腳本時,它會查詢所使用的語言,并引用與該語言相關(guān)聯(lián)的適當(dāng)注冊引擎,以進(jìn)行初始化。

3. 跨域請求對象(XMLHTTP,XMLHTTPRequest)

XMLHTTP對象普遍稱為XMLHTTPRequest,使客戶端腳本能夠發(fā)出HTTP請求。這個界面允許開發(fā)人員發(fā)出請求和接收響應(yīng),而無須重新加載或加載一個新網(wǎng)頁。

在IE 7及更新版本中,XMLHTTP由IE包裝,作為一個本機(jī)對象公開。開發(fā)人員可以編寫JavaScript,直接請求服務(wù)器端內(nèi)容,而無須直接調(diào)用ActiveX控件。在IE 7之前,如果開發(fā)人員希望使用XMLHTTPRequest,就需要通過腳本來加載MSXML XMLHTTP ActiveX控件,或者通過一個基于COM的加載項(xiàng)來實(shí)例化IXMLHTTPRequest。

4. 輔助功能

為了使輔助技術(shù)應(yīng)用程序能夠訪問DOM,Trident OM通過IAccessible界面公開了大多數(shù)HTML元素。這個界面允許屏幕讀取程序和其他輔助應(yīng)用程序讀取DOM中的元素,并將它們傳達(dá)給用戶。

到了IE 8,這個對象模型支持跨瀏覽器W3C Accessible Rich Internet Applications(ARIA)規(guī)范。這一規(guī)范使用“角色”、“狀態(tài)”和“屬性”來創(chuàng)建可以定制的元素定義。ARIA通過Microsoft Active Accessibility API(MSAA)來補(bǔ)充由輔助技術(shù)供應(yīng)商使用的功能。

1.5.6  組件模型子系統(tǒng)

組件模型子系統(tǒng)處理“內(nèi)容擴(kuò)展性”:基于COM和基于腳本的應(yīng)用程序都可以擴(kuò)展Trident的基本功能,并向其中添加新功能。與框架和選項(xiàng)卡擴(kuò)展不同的是,內(nèi)容擴(kuò)展通常是運(yùn)行在IE外部,不需要任何額外工作;任何托管MSHTML或?qū)崿F(xiàn)WebBrowser控件的應(yīng)用程序都能通過Trident“自動”加載內(nèi)容擴(kuò)展。

1. 腳本和二進(jìn)制行為

行為是MSHTML中的一些機(jī)制,允許開發(fā)人員創(chuàng)建元素效果,甚至是創(chuàng)建新的元素。它們是在IE 5.5版本中添加的,既用于擴(kuò)展CSS,也允許對傳統(tǒng)DOM元素進(jìn)行定制。例如,開發(fā)人員可以向所有<div>標(biāo)記中添加一個默認(rèn)的onClick事件,或者自動使所有<br>標(biāo)記像<p>標(biāo)記一樣操作。

腳本行為,通常被稱為HTML組件(HTC),通過標(biāo)記(markup)、JavaScript和CSS擴(kuò)展元素功能和行為。二進(jìn)制行為的操作方式與之類似,但使用了COM對象,這些對象實(shí)現(xiàn)IElementBehavior界面,并通過傳送元素和腳本構(gòu)造對事件做出反應(yīng)。HTML組件與二進(jìn)制行為的區(qū)別在于:它們是可下載的,可以在頁面加載期間運(yùn)行,而二進(jìn)制行為必須在本地安裝。

2. ActiveX控件

ActiveX控件是加載到一個網(wǎng)頁內(nèi)的COM服務(wù)器。它們提供的功能可以擴(kuò)展傳統(tǒng)的標(biāo)記和腳本。例如,ActiveX控件可以實(shí)現(xiàn)IOleClientSite,以繪制到一個Trident渲染圖面,或者例如,使用IPersistPropertyBag在二進(jìn)制文件和頁面內(nèi)的腳本之間傳送參數(shù)。

MSHTML可以向一個腳本公開一個控件的公共方法。為了從JavaScript中調(diào)用一個ActiveX對象的方法,開發(fā)人員必須實(shí)現(xiàn)IDispatch或IDispatchEx。還可以將事件傳送給腳本;控制可以使用IProvideTypeInfo來公開事件,以在聲明性語言中使用。在幾乎所有受支持的IE版本中,為了執(zhí)行這些操作中的任何一個,控制都必須實(shí)現(xiàn)IObjectSaftey;到了IE 7,甚至是為了加載一個具體控制,都必須為IE實(shí)現(xiàn)這個界面(或者等價的注冊表鍵)。

實(shí)例化的ActiveX控件有大量限制,每發(fā)布一個新的IE版本,都會增加這些限制的數(shù)目。例如,到了IE 8,Windows Vista及更高版本中,Internet區(qū)域中的控件將默認(rèn)在低完整性上下文中運(yùn)行。

1.5.7  編輯子系統(tǒng)

編輯子系統(tǒng)負(fù)責(zé)MSHTML的文本編輯和網(wǎng)頁制作功能。其中包含諸如以下功能:文本與窗體編輯、選擇、插入光標(biāo)瀏覽、鍵盤導(dǎo)航、剪貼板管理和contentEditable處理。

DOM中的每個元素(也就是每個控件、圖像、表等)都擁有一個由“文本、布局和渲染子系統(tǒng)”創(chuàng)建的布局。當(dāng)任意區(qū)域或元素被標(biāo)記為可編輯時,就會將它傳送給這一子系統(tǒng),并處理用戶和編程編輯命令。


上一章目錄下一章

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