首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取加载的SWF的ApplicationDomain中的所有定义?

如何获取加载的SWF的ApplicationDomain中的所有定义?
EN

Stack Overflow用户
提问于 2010-11-10 20:06:07
回答 4查看 9.5K关注 0票数 13

当您将一个SWF加载到另一个SWF中时,加载器SWF可以使用ApplicationDomain.getDefinition(name:String)从加载的SWF中获取特定定义。例如:

代码语言:javascript
复制
package 
{
    // ... imports

    public class SWFLoader extends Sprite
    {
        private var loadedAppDomain:ApplicationDomain;

        public function SWFLoader()
        {
            var request:URLRequest = new URLRequest("test.swf");
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onTestLoadComplete);
            loader.load(request);
        }

        private function onTestLoadComplete(event:Event):void
        {
            var loaderInfo:LoaderInfo = LoaderInfo(event.target);
            loadedAppDomain = loaderInfo.applicationDomain;

            // Here we can get ANY defined symbol (class, namespace or function according to Adobe Flash help)
            var someSymbolClass:Class = Class(loadedAppDomain.getDefinition("SomeSymbol"));
            var someSymbolSprite:Sprite = Sprite(new someSymbolClass());

            addChild(sprite);
        }
    }
}

如何才能获得SWF中的所有定义,而不显式地指定每个定义?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-24 00:54:21

从Flash player11.3开始,您可以使用ApplicationDomain.getQualifiedDefinitionNames()

参见the official documentation for the methodthis blog post about the Flash Player release

票数 14
EN

Stack Overflow用户

发布于 2010-11-10 20:40:39

EDIT:这是解决问题的最快方法:http://www.bytearray.org/?p=175

嗨,你可以使用这个库:https://github.com/claus/as3swf/wiki/没有时间做更深入的测试,但这是我发现的:

1-我已经创建了一个在库中包含2个导出的MC、$Test和$Test2的.swf 2-一旦加载程序加载了.swf,我就运行以下代码:

代码语言:javascript
复制
var swf : SWF = new SWF(loader.contentLoaderInfo.bytes);
trace(swf);

3-在输出中,你会注意到以下几行:

代码语言:javascript
复制
[76:SymbolClass] 
  Symbols:
    [0] TagID: 2, Name: $Test2
    [1] TagID: 1, Name: $Test

我认为有一种方法可以直接通过库API获取此信息

票数 10
EN

Stack Overflow用户

发布于 2010-11-10 20:27:48

您必须将加载的SWF放入当前的ApplicationDomain中。

在ContextLoader信息中,使用ApplicationDomain.currentDomain可以做到这一点。

代码语言:javascript
复制
loader.load(request, new ContextLoader(false, ApplicationDomain.currentDomain));

应该能行得通。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4144270

复制
相关文章

相似问题

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