Internet Explorer体系结构(8)

  

1.2.6  框架和选项卡扩展性

IE框架和选项卡扩展提供了大量界面,供开发人员用于扩展IE的功能。这一节并没有涵盖全部主要扩展性点;诸如ActiveX控件和行为之类的扩展被认为是“内容扩展”;它们存在于Trident引擎中。

1. 工具栏

工具栏是基于COM的扩展,它们是由IUnknown,IObjectWithSite,IPersistStream和IDeskBand构建的,作为IE的ReBar容器的孩子存在。这些扩展被放置在选项卡条与IE工作区顶部之间(见图1-13)。即开即用地,IE提供了两个工具栏:菜单栏和收藏夹栏。

图1-13  在IE 8中运行的TwitterBar工具栏

尽管从视觉上来看,工具栏是框架用户界面的一部分,但它是由选项卡进程所拥有的;每个工具栏的新实例都是为每个选项卡进程中的每个选项卡创建的。它们之所以出现在框架用户界面中,是为了与以前的版本保护一致。由于它们是由选项卡进程加载的,所以工具栏既可以运行在低完整性级别,也可以运行在中完整性级别,具体取决于拥有它的选项卡处在何种MIC级别。

通过“管理加载项”界面可以管理已安装的工具栏。此外,每个工具栏都有一个关闭按钮;在每个工具栏的左介都有一个红色的“x”,可以让用户禁用各个工具栏。也可以从“视图”菜单中启用、禁用或锁定工具栏。

2. 浏览器栏

浏览器栏是在IE窗口的工作区内部呈现的用户界面构造。这些扩展可以垂直显示在工作区的左侧,也可以垂直显示在其底端(见图1-14)。

图1-14  运行在IE 8中的HTTPWatch浏览器栏

和工具栏一样,浏览器栏也必须实现IUnknown,IObjectWithSite,IPersistStream和IDeskBand。浏览器栏在IE框架内有一个子窗口,而且和工具栏一样,尽管浏览器栏在视觉上是浏览器框架的一部分,但它们实际是为每个选项卡实例化的。工具栏的位置(是垂直位于左侧,还是水平位于底端)是由类别ID决定的,这个ID在注册库时设定。

在没有构建基于COM库的情况下也可以创建浏览器栏。在这种情况下,不是注册一个专用DLL,而是加载ShDocVw库,并导航到一个指定URL;这样,就可以将一个常用网站转换为扩展,以进行持久访问。关于如何创建这两种类型的浏览器栏,可以在本书后面找到更多信息。

出于性能、安全性和完整性目的,对浏览器栏设置了一些限制条件。每个浏览器栏类型只能同时显示一个实例。这些扩展以其所有者选项卡进程的完整性级别执行,根据应用于网页的区域或安全性设置,这一级别既可能为低,也可能为中。最后,那些指向网页而不是指向COM库的浏览器栏,不能与当前加载页面通信。

3. 加速器和OpenService规范

加速器是基于标记的菜单扩展,它们可以通过IE安装,通过浏览器的快捷菜单访问。这些基于XML的扩展是从OpenService XML规范扩展而来的,安装到用户的配置文件中,能够向Web服务发送上下文信息。

每个加速器定义中包含了元数据信息,包括图标、标题、类别URL目标和URL预览目标,它在执行之前显示一个上下文预览(见图1-15)。IE公开了window.external对象的AddService()函数,允许从网页中安装加速器,还公开了IsServiceInstalled()方法,以检查是否已经安装了一个加速器。

图1-15  Bing地图加速器

所有加速器都被安装到一个用户配置文件中,而不是在系统范围内安装。可以通过“管理加载项”用户界面来管理或删除加速器。

读书导航