正文

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

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


  

1. IE動(dòng)態(tài)HTML對(duì)象模型和W3C文檔對(duì)象模型

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

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

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

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

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

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

3. 跨域請(qǐng)求對(duì)象(XMLHTTP,XMLHTTPRequest)

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

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

4. 輔助功能

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

到了IE 8,這個(gè)對(duì)象模型支持跨瀏覽器W3C Accessible Rich Internet Applications(ARIA)規(guī)范。這一規(guī)范使用“角色”、“狀態(tài)”和“屬性”來(lái)創(chuàng)建可以定制的元素定義。ARIA通過(guò)Microsoft Active Accessibility API(MSAA)來(lái)補(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)用程序都能通過(guò)Trident“自動(dòng)”加載內(nèi)容擴(kuò)展。

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

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

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

2. ActiveX控件

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

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

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

1.5.7  編輯子系統(tǒng)

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

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


上一章目錄下一章

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