使用ModuleManager类加载模块
你可以使用ModuleManaer类来加载模块。这个技巧比使用标记更加抽象,但是它为你提供关于如何以及合适加载模块的更高层的控制。
 
要使用ModuleManager来在ActionScript中加载一个模块,你首先要使用ModuleManager的getModule()方法获得一个模块的IModuleInfo接口的引用,然后调用接口的Load()方法。最后,你调用几口的factory属性的create()方法并对返回值进行类型转换。
 
IModuleInfo类的load()方法可选择传入一个ApplicationDomain和一个SecurityDomain作为参数。如果你没有定义它们,模块将被加载进一个新的子域。
 
下面的例子中,“壳”程序加载ColumnChartModule.swf文件然后将它添加到显示列表,所以它将在程序启动时呈现:

< mx:Application xmlns:mx ="http://www.adobe.com/2006/mxml" creationComplete ="initApp()" >
         < mx:Script >
                        import mx.events.ModuleEvent;
                import mx.modules.ModuleManager;
                import mx.modules.IModuleInfo;
                public var info:IModuleInfo;
                private function initApp():void {
                  info = ModuleManager.getModule("ColumnChartModule.swf");
                  info.addEventListener(ModuleEvent.READY, modEventHandler);
                        // Load the module into memory. Calling load() makes the
                        // IFlexModuleFactory available. You can then get an
                        // instance of the class using the factory's create()
                        // method.
                  info.load();
                }
          private function modEventHandler(e:ModuleEvent):void {
                        // Add an instance of the module's class to the
                        // display list.
                        vb1.addChild(info.factory.create() as ColumnChartModule);
          }
        ]]>
         mx:Script >
         < mx:VBox id ="vb1" />
mx:Application >
基于MXML的模块可以被其他模块加载。这些模块还可以加载其他模块,以此类推。
 
必须将模块的接口定义在函数外,即在函数的局部作用域之外,否则,对象可能被垃圾回收,而相关联的事件监听器可能永远不会被调用。
 
从不同的服务器加载模块
 
要从一个服务器将模块加载到在不同的服务器上运行的程序中,你必须在模块和程序之间建立某种信赖。
 
跨域程序访问
1.当你加载程序时,你必须调用allowDomain()方法且指定你要加载的模块的目标域。即:在程序的reinitialize时间处理器中指定目标域以确定对目标域的设定在模块被加载前完成;
2.在存放模块的远程服务器的cross-domain文件中添加一个定义了运行着要加载模块的程序的位置的入口;
3.在要加载模块的程序的preinitializ事件处理器中加载cross-domain文件;
4.在被夹在的模块中,调用allowDomain()方法,使模块可以与程序互通。
 
下面的例子展示了加载程序时的init()方法:
public function setup(): void {
Security.allowDomain( "remoteservername");
Security.loadPolicyFile( "http://remoteservername/crossdomain.xml");
var request:URLRequest = new URLRequest("http://remoteservername/crossdomain.xml");
var loader:URLLoader = new URLLoader();
loader.load(request);
}
下面的例子展示了被加载模块的init()方法:
public function initMod(): void {
Security.allowDomain( "loaderservername");
}
下面的例子只能是了在远程服务器上的cross-domain文件:

< cross-domain-policy >
< allow-access-from domain ="loaderservername" to-ports ="*" />
cross-domain-policy >