我需要对这个主题进行一些澄清,因为我刚刚遇到将 swf 加载到重用加载器对象中的问题。
假设我有 3 个 SWF。
主文件.swf
childA.swf
childB.swf
Main.swf 中有一个可重用的加载程序对象 (myloader.load("childA.swf")),并且 childA 或 childB swf 将通过用户交互加载。
两个子 swf 都有一个 com 包,该包中有一个名为 config 的类。
这两个类的配置文件是不同的文件,只是名称相同。
两个子 swf 还调度 Main 监听的事件
现在我遇到的问题是,如果先加载 child,然后在加载 child 后,它仍然会显示为 childA。基本上,无论哪一个先加载到加载器中都会获胜。
这让我抓狂,因为我所做的任何事情都不会导致 swf 卸载。直到我发现下面的代码。
var appDomain:ApplicationDomain = new ApplicationDomain();
var context:LoaderContext = new LoaderContext(false, appDomain);
_contentPanel.load(new URLRequest(str), context);
我在某处讨论如何真正卸载 swf 的帖子中偶然发现了这段代码。显然,这也适用于如何真正加载 swf。
正如您所看到的,一个新的 appDomain 被创建并在加载时分配给上下文。
这就像一个梦想,我现在可以整天装卸。
我的困惑是,当我认为主 swf 不应该拾取它时,子级调度仍然有效,因为它不在同一个 appDomain 中。
我的意思是这个活动不应该被阻止吗?
卸载 SWF
Loader 类提供Loader.unload()
(或在 Flash Player 版本 10 之后 -Loader.unloadAndStop()
)
第二个加载的 SWF 被第一个加载的 SWF 覆盖的问题
存储在的对象ApplicationDomain
s 按其类名存储,我想知道加载的 SWF(或其子级)的类名是否是覆盖的。即使事实并非如此;为什么不为每个正在加载的对象使用 Loader 的新实例?
主 SWF 如何从另一个应用程序域中选取两个子级
主 SWF 将能够使用新的(加载的)应用程序域,因为它们是主 SWF 的子域(请参阅 ApplicationDomain.parentDomain)。主 SWF 的域将是“系统域”,新实例将在其下方加载。
从加载器中分离加载的 SWF
理想情况下,您希望能够访问与 SWF 状态无关的 SWF 数据。Loader
。您可以通过在加载后访问 SWF 的根 movieClip 并使用以下命令创建一个新实例来完成此操作
var rootClipClass:Class = ApplicationDomain.getDefinition("[InsertYourRootClipName]") as Class;
var rootClip:MovieClip = new rootClipClass();
那时,您可以卸载加载程序并干净地使用新实例。
进一步阅读
- Loader.unload() 和 Loader.unloadAndStop() 之间的区别 http://helpx.adobe.com/flash/kb/flash-player-10-action-script.html
- 使用应用程序域 - Adobe Docs http://help.adobe.com/en_US/as3/dev/WSd75bf4610ec9e22f43855da312214da1d8f-8000.html
- 加载器类参考 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html
- ApplicationDomain类参考 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/ApplicationDomain.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)