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