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