1.2.6 框架和選項(xiàng)卡擴(kuò)展性
IE框架和選項(xiàng)卡擴(kuò)展提供了大量界面,供開發(fā)人員用于擴(kuò)展IE的功能。這一節(jié)并沒有涵蓋全部主要擴(kuò)展性點(diǎn);諸如ActiveX控件和行為之類的擴(kuò)展被認(rèn)為是“內(nèi)容擴(kuò)展”;它們存在于Trident引擎中。
1. 工具欄
工具欄是基于COM的擴(kuò)展,它們是由IUnknown,IObjectWithSite,IPersistStream和IDeskBand構(gòu)建的,作為IE的ReBar容器的孩子存在。這些擴(kuò)展被放置在選項(xiàng)卡條與IE工作區(qū)頂部之間(見圖1-13)。即開即用地,IE提供了兩個工具欄:菜單欄和收藏夾欄。
圖1-13 在IE 8中運(yùn)行的TwitterBar工具欄
盡管從視覺上來看,工具欄是框架用戶界面的一部分,但它是由選項(xiàng)卡進(jìn)程所擁有的;每個工具欄的新實(shí)例都是為每個選項(xiàng)卡進(jìn)程中的每個選項(xiàng)卡創(chuàng)建的。它們之所以出現(xiàn)在框架用戶界面中,是為了與以前的版本保護(hù)一致。由于它們是由選項(xiàng)卡進(jìn)程加載的,所以工具欄既可以運(yùn)行在低完整性級別,也可以運(yùn)行在中完整性級別,具體取決于擁有它的選項(xiàng)卡處在何種MIC級別。
通過“管理加載項(xiàng)”界面可以管理已安裝的工具欄。此外,每個工具欄都有一個關(guān)閉按鈕;在每個工具欄的左介都有一個紅色的“x”,可以讓用戶禁用各個工具欄。也可以從“視圖”菜單中啟用、禁用或鎖定工具欄。
2. 瀏覽器欄
瀏覽器欄是在IE窗口的工作區(qū)內(nèi)部呈現(xiàn)的用戶界面構(gòu)造。這些擴(kuò)展可以垂直顯示在工作區(qū)的左側(cè),也可以垂直顯示在其底端(見圖1-14)。
圖1-14 運(yùn)行在IE 8中的HTTPWatch瀏覽器欄
和工具欄一樣,瀏覽器欄也必須實(shí)現(xiàn)IUnknown,IObjectWithSite,IPersistStream和IDeskBand。瀏覽器欄在IE框架內(nèi)有一個子窗口,而且和工具欄一樣,盡管瀏覽器欄在視覺上是瀏覽器框架的一部分,但它們實(shí)際是為每個選項(xiàng)卡實(shí)例化的。工具欄的位置(是垂直位于左側(cè),還是水平位于底端)是由類別ID決定的,這個ID在注冊庫時設(shè)定。
在沒有構(gòu)建基于COM庫的情況下也可以創(chuàng)建瀏覽器欄。在這種情況下,不是注冊一個專用DLL,而是加載ShDocVw庫,并導(dǎo)航到一個指定URL;這樣,就可以將一個常用網(wǎng)站轉(zhuǎn)換為擴(kuò)展,以進(jìn)行持久訪問。關(guān)于如何創(chuàng)建這兩種類型的瀏覽器欄,可以在本書后面找到更多信息。
出于性能、安全性和完整性目的,對瀏覽器欄設(shè)置了一些限制條件。每個瀏覽器欄類型只能同時顯示一個實(shí)例。這些擴(kuò)展以其所有者選項(xiàng)卡進(jìn)程的完整性級別執(zhí)行,根據(jù)應(yīng)用于網(wǎng)頁的區(qū)域或安全性設(shè)置,這一級別既可能為低,也可能為中。最后,那些指向網(wǎng)頁而不是指向COM庫的瀏覽器欄,不能與當(dāng)前加載頁面通信。
3. 加速器和OpenService規(guī)范
加速器是基于標(biāo)記的菜單擴(kuò)展,它們可以通過IE安裝,通過瀏覽器的快捷菜單訪問。這些基于XML的擴(kuò)展是從OpenService XML規(guī)范擴(kuò)展而來的,安裝到用戶的配置文件中,能夠向Web服務(wù)發(fā)送上下文信息。
每個加速器定義中包含了元數(shù)據(jù)信息,包括圖標(biāo)、標(biāo)題、類別URL目標(biāo)和URL預(yù)覽目標(biāo),它在執(zhí)行之前顯示一個上下文預(yù)覽(見圖1-15)。IE公開了window.external對象的AddService()函數(shù),允許從網(wǎng)頁中安裝加速器,還公開了IsServiceInstalled()方法,以檢查是否已經(jīng)安裝了一個加速器。
圖1-15 Bing地圖加速器
所有加速器都被安裝到一個用戶配置文件中,而不是在系統(tǒng)范圍內(nèi)安裝??梢酝ㄟ^“管理加載項(xiàng)”用戶界面來管理或刪除加速器。