1.3 開發(fā)人員工具
開發(fā)人員工具是一組內(nèi)置的HTML,JavaScript和CSS工具,專門用于進(jìn)行快速原型制作與網(wǎng)頁調(diào)試。這些工具在IE 7中稱為“開發(fā)人員工具欄”,可以作為加載瀏覽器欄的下一級;在IE 8中,這些工具得到了改進(jìn),成為內(nèi)置工具。這些工具由4個(gè)主選項(xiàng)卡組成:HTML和樣式內(nèi)置編輯器、CSS樣式查看器、腳本調(diào)試器和JavaScript探查器。
HTML和CSS選項(xiàng)卡顯示關(guān)于DOM、頁面布局和適用樣式的可編輯信息。DOM可以通過一個(gè)樹狀視圖對象進(jìn)行編輯;在單擊一個(gè)節(jié)點(diǎn)時(shí),可以通過相鄰面板來查看樣式、布局、屬性、信息和CSS跟蹤。只要這個(gè)編輯器所顯示的元素仍然存在于該頁面中,在這個(gè)視圖中對項(xiàng)目進(jìn)行的更改都會反映到當(dāng)前頁面中。
腳本調(diào)試器和探查器提供了當(dāng)前頁面的實(shí)時(shí)腳本調(diào)試、控制臺編輯、斷點(diǎn)插入和腳本定時(shí)信息。在“腳本”選項(xiàng)卡(譯者注:原書中為Debugger選項(xiàng)卡)中,開發(fā)人員可以打開和關(guān)閉調(diào)試、逐語句、逐過程和跳出;查看斷點(diǎn)、局部變量、監(jiān)視和調(diào)用堆棧。探查器顯示了對當(dāng)前頁面所加載JavsScript函數(shù)的定時(shí)調(diào)用,以及調(diào)用數(shù)目和整體調(diào)用樹。
腳本錯(cuò)誤和查看源碼
“腳本錯(cuò)誤”對話框向用戶通告網(wǎng)頁上發(fā)生的腳本錯(cuò)誤;為處理該網(wǎng)頁上的腳本塊而加載的腳本引擎會返回這個(gè)錯(cuò)誤,由IE顯示。在以前版本的IE中,如果注冊了默認(rèn)的系統(tǒng)調(diào)試器,有一些腳本錯(cuò)誤會被發(fā)送到該調(diào)試器。
到了IE 8,IE中包含了內(nèi)置源碼查看器?!安榭丛创a”顯示標(biāo)記并用顏色加以區(qū)分,還包含了行號以便引用。通過訪問“開發(fā)人員工具”的“文件”菜單中“自定義Internet Explorer查看源碼”菜單選項(xiàng),可以改變默認(rèn)的源查看器。
1.4 Shell文檔視圖
Shell文檔視圖(ShDocVw)是一種活動文檔容器(也稱為“文檔宿主程序”)。這個(gè)容器在Shell命名空間內(nèi)部托管OLE活動文檔(或者文檔對象)。通常,IE托管MSHTML,這是一種為呈現(xiàn)HTML設(shè)計(jì)的文檔對象。為了托管OLE活動文檔,Shell文檔視圖實(shí)現(xiàn)了IOleClientSite和IOleDocumentSite。
將在后面進(jìn)行討論的WebBrowser控件是一個(gè)包裝,用于封裝同一IShellBrowser界面。WebBrowser控件不是托管在IE框架內(nèi),它是一個(gè)可以由其他應(yīng)用程序托管的ActiveX控件。通過ShDocVw和一個(gè)稱為CBaseBrowser2的私有類(但在導(dǎo)出的表頭中可以看到這個(gè)類),IE框架和WebBrrowser控件共享一些公共功能,例如“旅行日志”和快捷菜單擴(kuò)展。
1.4.1 旅行日志和共享功能
有很多功能都是由IE框架和WebBrowser控件共享的,這一共享是通過ShDocVw及內(nèi)部的CBaseBrowser2類實(shí)現(xiàn)的。
旅行日志是IE用于導(dǎo)航信息的函數(shù)式存儲與訪問機(jī)制。簡單地說,它是一種數(shù)據(jù)結(jié)構(gòu)和相應(yīng)的界面,存儲一個(gè)“堆?!保瑢σ粋€(gè)ShDocVw實(shí)例的導(dǎo)航進(jìn)行更改。還有一些公開的界面,例如ITravelLog,但這些界面在SDK文檔中顯示為已棄用(不過很可能還能訪問它們)。
IE框架和WebBrowser控件之間共享的很多其他函數(shù)和屬性,都可以通過ExecWB()函數(shù)和相關(guān)事件在ShDocVw的IWebBrowser2界面中找到。
1.4.2 Trident (MSHTML)
Trident (MSHTML)是一個(gè)由ShDocVw托管的OLE活動文檔。終端用戶更多的是將它看作IE中一個(gè)顯示網(wǎng)頁的框。在這個(gè)顯示之下有大量子系統(tǒng),用于處理網(wǎng)頁的分析、渲染和布局,而且還公開了大量API。在下一節(jié)將更詳細(xì)地討論Trident是如何下載、分析和顯示網(wǎng)頁的。
1.4.3 第三方及自定義文檔對象
COM對象可以公開一個(gè)自定義OLE活動文檔,它的實(shí)現(xiàn)可以被托管在ShDocVw中。一些常見的文檔對象包括Microsoft Office查看器(PowerPoint,Word和Visio)和PDF閱讀器(Adobe Acrobat和FoxIt閱讀器)。這些應(yīng)用程序只是指出與其活動文檔處理器的MIME類型和文件關(guān)聯(lián),當(dāng)加載一個(gè)與該關(guān)聯(lián)相匹配的文檔時(shí),IE將加載相關(guān)的實(shí)現(xiàn)。
1.5 Trident布局和渲染引擎
MSHTML為很多人所熟知,有時(shí)被稱為“Trident”,它是一種布局和渲染引擎,由IE用于處理HTML,CSS和其他標(biāo)記分析。Trident本身是一種OLE活動文檔,使用單元線程(apartment threading)將其構(gòu)建為一個(gè)全異步庫。
盡管Trident是由Active Document容器托管的,但它有自己非常深入和廣泛的擴(kuò)展模型。導(dǎo)出的組件在很大程度上是實(shí)現(xiàn)IDispatch或IDispatchEx,因此,可以使用OLE自動化與腳本進(jìn)行訪問。它的很多子系統(tǒng)也支持通過COM進(jìn)行二進(jìn)制擴(kuò)展;諸如Active控件、腳本引擎和行為等對象,可以在運(yùn)行時(shí)加載,在引擎操作時(shí)執(zhí)行。
Trident還負(fù)責(zé)確定和處理IE的兼容性場景,既包括二進(jìn)制界面方面的兼容,也包括Web標(biāo)準(zhǔn)方面的兼容。由于不同版本的發(fā)布時(shí)間相距較遠(yuǎn),而且存在大量的主流IE版本,所以很多Web和系統(tǒng)應(yīng)用程序在設(shè)計(jì)時(shí)所依據(jù)的Trident版本是不一樣的。因此,在不同版本中仍然保留了Trident的組成部分,使IE能夠處理下層Web標(biāo)準(zhǔn)支持以及COM界面的原有實(shí)現(xiàn)。