ActiveX 文档的设计非常依赖于当前作为目标的应用程序。所有容器的创建不是相等的,在考虑事件时尤其明显。但是,在测试事件前,请先阅读下面的两点注意,它们将影响键事件的可用性和行为。
就象 ActiveX 控件一样,ActiveX 文档不能独立存在。它必须放置在容器中。把 ActiveX 文档挂接到其容器的过程称为定位─ 也就是说,在容器中为 ActiveX 文档分配一个位置。
只有在 ActiveX 文档已经被定位之后,容器的属性对该文档才是可用的。例如,在 ActiveX 文档被定位前,UserDocument 对象的 Parent 属性(它返回对容器的引用)是不可用的。Hyperlink 对象在文档被定位前也是不可用的。
详细信息 创建 ActiveX 文档与创建 ActiveX 控件相似,请精读“建立 ActiveX 控件”的“创建控件的术语”。
如果容器应用程序支持 PropertyBag,那么保存文件和在文件检索数据都很容易─ 无论是否要保存到 .vbd 文件都不依靠该应用程序。例如,Internet Explorer 把数据保存到 .vbd 文件,但 Office Binder 却把所有数据保存到 .obd (Office Binder Data)文件。但是,一旦数据已经保存好,InitProperties 就不会发生;ReadProperties 事件将取代它。同样,在用户保存一个属性之前,WriteProperties 事件也不会发生。
详细信息 要用 PropertyBag 来保存属性,请参阅本章的“保持 ActiveX 文档数据”。
在 UserDocument 对象的生命期内的主要事件的含义如下:
注意 在 Internet Explorer 4.0中,每当用户离开对文档的漫游时,ActiveX 文档就会被中止。在Internet Explorer 3.0中,ActiveX 文档储存于四个文档的高速缓存中。当用户加载或漫游到第五个文档时,ActiveX 文档将被中止。
当用户打开一个 ActiveX 文档时,该文档上没有属性被存储,则下列事件将发生。
事件 | 事件完成的任务 |
Initialize | 创建文档,但未在容器中定位。 |
InitProperties | 设置属性的缺省值。 |
Show | 在容器中显示文档。在容器中已经定位了文档,因而容器属性变得可用。 |
EnterFocus | 文档获得焦点。 |
如果用户已经保存了任一属性,则发生 ReadProperties 事件,而不是 InitProperties 事件。
事件 | 事件完成的任务 |
Initialize | 创建文档,但未在容器中定位。 |
ReadProperties | 通过 PropertyBag 对象的 ReadProperties 方法读取属性。 |
Show | 在容器中显示文档。 |
EnterFocus | 文档获得焦点。 |
也许,Show 和 Hide 事件是 ActiveX 文档的两个最重要的事件。
这些事件由于以下原因而格外重要:
注意 在Internet Explorer 3.0中,ActiveX 文档储存于四个文档的高速缓存中。当用户加载或漫游到第五个文档时,ActiveX 文档将被中止。当用户离开 ActiveX 文档漫游到另一个文档,或当文档正被浏览或仍在当前文档的高速缓存中时,而Internet Explorer 3.0被终止时,发生Hide 事件。
详细信息 “创建 ActiveX 文档”中的一个循序渐进过程“UserDocument 的生命周期”主题,用示例说明了 ActiveX 文档生命期中的主要事件。