actionscript-3 flashvars

actionscript 3 - AS3 Pase FlashVars a swf cargado



actionscript-3 (4)

Tengo un A.swf que carga B.swf en un clip de película y necesita pasarlo un poco de FlashVars. Al cargar B.swf con html, puedo pasar FlashVars bien. Al pasar de A.swf, obtiene un

Error # 2044: ioError no controlado :. text = Error # 2032: error de transmisión. URL: archivo:

El código en A.swf es

var request:URLRequest = new URLRequest ("B.swf"); var variables : URLVariables = new URLVariables(); variables.xml = "test.xml"; // This line causes the error 2044, else B.swf loads fine with FlashVars request.data = variables; loader.load (request);

En B.swf, está comprobando los Flashvars como tal. Funciona bien desde el lado html

this.loaderInfo.parameters.xml


¿Cómo arenero los permisos? Traté de agregar la carpeta a través de la configuración, pero eso tampoco funcionó.

http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html#117502

Hice un proyecto simple como nuevo. Este es el código completo.

var mc:MovieClip = new MovieClip (); var loader:Loader = new Loader (); loader.contentLoaderInfo.addEventListener (Event.COMPLETE, OnComplete); var request:URLRequest = new URLRequest ("B.swf"); var variables : URLVariables = new URLVariables(); variables.xml = "test2.xml"; // This line causes the error 2044, if i comment out, it runs fine without FlashVars request.data = variables; loader.load (request); function OnComplete (e:Event) { trace ("On Complete"); mc = e.currentTarget.content as MovieClip; addChild (mc); }



No es necesario que "A" pase FlashVars a "B". Simplemente haga que B acceda a FlashVars. Lo siguiente funcionará si B está dentro de A, o el nivel superior mismo:

Agregue un detector de eventos ADDED_TO_STAGE en el constructor de B. p.ej:

function B(){ this.addEventListener(Event.AddedToStage, onAddedToStageHandler); }

Cuando tenga acceso al escenario, ahora puede acceder a FlashVars en A de esta manera:

Para ver correctamente una variable llamada myVar flashVar en B.swf, lo haces (dentro de B):

private function onAddedToStageHandler(){ var flashVars : Object = LoaderInfo(this.stage.loaderInfo).parameters; // now you have access to your flashVars! trace(flashVars.myVar); }

stage.loaderInfo es lo que necesita mirar.


puedes agregar los flasars en el URI cuando lo estás cargando

URLRequest(String("B.swf" + "?myvar=45"));

el problema es que cuando cargó la cadena en el uri, se coloca dentro de Object loaderInfo.parameters por lo que si desea pasar esos parámetros, debe crear una cadena para pasarlos a.

Aquí hay un script de http://ragona.com/blog/pass-flashvars-loaded-swf/ que muestra cómo convertir eso en una matriz de cadenas de nuevo

//:: Store loader info var lInfo:Object = this.root.loaderInfo.parameters; //:: Flashvars var fVars:String = "?whee=nada"; //:: Getting the syntax change (? --> &) out of the way with a dummy var //:: Set path + data for (var flashVar in lInfo) { fVars += "&" + flashVar + "=" + lInfo[flashVar]; } var myRequest:URLRequest = new URLRequest(String("/myPath.swf" + fVars));