一个applicationDomain的例子
- 05月 30th, 2008
-
有需要的可以去跑一下。
如何使用这个例子
1.把AsChild.as中str赋值的部分编译两次,得到2个SWF文件,分别命名为AsChild.swf和AsChilden.swf。
2.把上面两个SWF文件拷贝到Parent.mxml所在工程的bin目录下。
3.通过更改Parent.mxml中注释(同时修改domain的赋值),来查看变化
AsChild.as
package { import flash.display.Sprite; public class AsChild extends Sprite { public function AsChild() { } public function show():String{ return str; } private var str:String = '您好'; //private var str:String = 'Hello'; } }Parent.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()"> <mx:Script> <![CDATA[ import mx.core.UIComponent; import mx.controls.Alert; private var loaderZH:Loader; private var loaderEN:Loader; private var swfLoaded:int; public function init():void{ var url:String = 'AsChild.swf'; var request:URLRequest = new URLRequest(url); var domain:ApplicationDomain = ApplicationDomain.currentDomain; //var domain:ApplicationDomain = new ApplicationDomain(); //var domain:ApplicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain); var policyFile:Boolean = false; var context:LoaderContext = new LoaderContext(policyFile,domain); loaderZH = new Loader(); loaderZH.contentLoaderInfo.addEventListener(Event.COMPLETE,AsCompleteHandle); loaderZH.load(request,context); url = 'AsChilden.swf'; request = new URLRequest(url); domain = ApplicationDomain.currentDomain; //domain = new ApplicationDomain(); //domain = new ApplicationDomain(ApplicationDomain.currentDomain); context = new LoaderContext(policyFile,domain); loaderEN = new Loader(); loaderEN.contentLoaderInfo.addEventListener(Event.COMPLETE,AsCompleteHandle); loaderEN.load(request,context); } private function AsCompleteHandle(e:Event):void{ swfLoaded++; if(swfLoaded == 2) { AsCompleteHandleTwo(); } } private function AsCompleteHandleTwo():void{ var zhNewClass:Class = loaderZH.contentLoaderInfo.applicationDomain.getDefinition("AsChild") as Class; var zhClass:Object = new zhNewClass(); Alert.show(zhClass.show()); var enNewClass:Class = loaderEN.contentLoaderInfo.applicationDomain.getDefinition("AsChild") as Class; var enClass:Object = new enNewClass(); Alert.show(enClass.show()); } ]]> </mx:Script> </mx:Application>