首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要ApplicationDomain澄清

需要ApplicationDomain澄清
EN

Stack Overflow用户
提问于 2012-12-07 04:34:46
回答 1查看 710关注 0票数 3

我需要对这个问题进行一些澄清,因为我刚刚遇到了将swfs加载到重用的加载器对象中的问题。

假设我有3个SWF。

Main.swf

childA.swf

childB.swf

Main.swf中有一个可重用的加载器对象(myloader.load("childA.swf")),childA或childB swf将通过用户交互加载。

这两个子swfs都有一个com包,其中包含一个名为config的类。

两个类的配置文件是不同的文件,只是名称相同。

这两个子swf还会分派一个Main监听的事件

现在我遇到的问题是,如果先加载childA,然后在加载childB之后,它仍然会显示为childA。基本上,无论哪一个先加载到该加载器中,都将是赢家。

这让我抓狂,因为我做的任何事情都不会导致swf卸载。直到我找到了下面的代码。

代码语言:javascript
复制
var appDomain:ApplicationDomain = new ApplicationDomain();
var context:LoaderContext = new LoaderContext(false, appDomain);
_contentPanel.load(new URLRequest(str), context);

我在一篇关于如何真正卸载swf的文章中偶然发现了这段代码。显然,这也适用于如何真正加载swf。

正如您所看到的,加载时会创建一个新的appDomain并将其分配给上下文。

这就像一个梦一样,我现在可以整天加载和卸载。

我的困惑是子调度的事件仍然有效,当我认为主swf不应该拾取它时,因为它不在相同的appDomain中。

我的意思是,事件不应该被阻止吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 05:10:05

卸载SWF

Loader类提供Loader.unload() (或更高版本的Flash Player。10 - Loader.unloadAndStop())

第二个加载的SWF被第一个覆盖时出现的问题

存储在ApplicationDomain中的对象是通过它们的类名存储的,我想知道加载的SWF(或它们的子项)的类名是否会被覆盖。即使不是这样,为什么不为每个要加载的对象使用Loader的新实例呢?

主SWF如何从另一个应用程序域获取这两个子级

主SWF将能够使用新的(已加载的)应用程序域,因为它们是主SWF的子域(请参阅ApplicationDomain.parentDomain)。主SWF的域将是“系统域”,新实例将被加载到它下面。

从加载器拆分加载的SWF

理想情况下,您希望能够访问与Loader状态无关的SWF数据。您可以通过在加载后访问SWF的根movieClip并使用

代码语言:javascript
复制
var rootClipClass:Class = ApplicationDomain.getDefinition("[InsertYourRootClipName]") as Class; 
var rootClip:MovieClip = new rootClipClass(); 

在这一点上,您可以卸载加载器并干净地使用新实例。

进一步阅读

  • Difference between Loader.unload() and Loader.unloadAndStop()
  • Working with Application Domains - Adobe Docs
  • Loader class reference
  • ApplicationDomain class reference
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13752053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档