转自:
ApplicationDomain
(终于消除了长久以来对ApplicationDomain的误解,原来一直以为这是一个和安全沙箱有关内容,看来我真的错了。在 中有详细的解释。- 应用程序域 (Application domain):用于将不同 SWF 文件中使用的类分开的机制,以便在 SWF 文件包含具有相同名称的不同类时,这些类不会彼此覆盖。
每个安全域被分成一个或多个由 ApplicationDomain 对象表示的应用程序域。 应用程序域并不是用于安全目的;它们用于管理 ActionScript 代码的协作单元。 如果是从其它域加载 SWF 文件,并允许将它放置到另外一个安全域中,则您将无法控制所加载的 SWF 文件被放置到哪个应用程序域中;即使您指定应选择某个应用程序域,也会忽略。 但是,如果是将 SWF 文件加载到您自己的安全域中(因为此 SWF 文件来自您自己的域,或者您正在将它导入到您的安全域中),您就可以控制为所加载的 SWF 文件选择哪个应用程序域。
应用程序域有三种类型,系统域子域(新的应用程序域)、当前应用程序域、当前应用程序域的子域。他们的关系就像是这样
ApplicationDomain 类的用途是存储 ActionScript 3.0 定义表。SWF 文件中的所有代码被定义为存在于应用程序域中。可以使用应用程序域划分位于同一个安全域中的类。这允许同一个类存在多个定义,并且还允许子级重用父级定义。 利用ApplicationDomain加载类定义的代码如下
1. | var urlRequest:URLRequest = new URLRequest(url); |
2. | var loader:Loader = new Loader(); |
3. | var context:LoaderContext = new LoaderContext(); |
4. | //当前域 |
5. | context.applicationDomain = ApplicationDomain.currentDomain; |
6. | //新应用程序域 |
7. | //context.applicationDomain = new ApplicationDomain(); |
8. | //当前域子域 |
9. | //context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); |
10. | loader.load(urlRequest, context); |
1. | //这里的ClassDefinitionName是我们在被加载的swf中的类定义的名称 |
2. | var AClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition(ClassDefinitionName) as Class; |
3. | new AClass(); |