flash 中的 ApplicationDomain
使用 ApplicationDomain 类 <script src="/_sharedassets/pages.js"></script>
ApplicationDomain
ApplicationDomain 类的用途是存储 ActionScript 3.0 定义表。SWF 文件中的所有代码被定义为存在于ApplicationDomain 中。 可以使用应用程序域划分位于同一个安全域中的类。这允许同一个类存在多个定义,并且还允许子级重用父级定义。
在使用 Loader 类 API 加载用 ActionScript 3.0 编写的外部 SWF 文件时,可以使用应用程序域。(请注意,在加载图像或用
ActionScript 1.0 或 ActionScript 2.0 编写的 SWF 文件时不能使用应用程序域。)包含在已加载类中的所有
ActionScript 3.0 定义都存储在应用程序域中。加载 SWF 文件时,通过将 LoaderContext 对象的
参数设置为
applicationDomain
,可以指定文件包含在
Loader 对象所在的相同应用程序域中。通过将加载的 SWF 文件放在同一个应用程序域中,可以直接访问它的类。如果加载的 SWF
文件包含嵌入的媒体(可通过其关联的类名称访问),或者您要访问加载的 SWF 文件的方法,则这种方式会很有用。ApplicationDomain
.currentDomain
使用 ApplicationDomain 类 <script src="/_sharedassets/pages.js"></script>
使用应用程序域时,还要记住以下几点:
- SWF 文件中的所有代码被定义为存在于应用程序域中。 主应用程序在"当前域"中运行。"系统域"中包含所有应用程序域(包括当前域),也就是,它包含所有 Flash Player 类。
- 所有应用程序域(除系统域外)都有关联的父域。主应用程序的应用程序域的父域是系统域。已加载的类仅在其父级中没有相关定义时才进行定义。不能用较新的定义覆盖已加载类的定义
看一下下面这个例子:
使用 ApplicationDomain 类 <script src="/_sharedassets/pages.js"></script>
主应用程序文件为 application1.swf。它包含从其它 SWF 文件加载内容的 Loader 对象。在此方案下,当前域为 Application domain 1。用法 A、用法 B 和用法 C 说明了为应用程序中的每个 SWF 文件设置适当应用程序域的不同方法。
用法A:
用的不是很多,实际上是单独的创建一个新的域和当前应用程序域平级。作为系统域的真子集。
request.url = "application2.swf"; request.applicationDomain = new ApplicationDomain ();
用法B:
被用作Rsls(运行时共享库)的技术,就是在当前的ApplicationDomain添加新的类定义。
request.url = "module3.swf"; request.applicationDomain = ApplicationDomain.currentDomain;
用法C:
被用作Modual(模块)技术,就是在当前的ApplicationDomain的真子域,他的特点是可以动态的加载和移除。便于垃圾回收。
request.url = "module3.swf"; request.applicationDomain = new ApplicationDomain (ApplicationDomain .currentDomain);