flex flash actionscript-3 swfloader flashvars

flex - Pasar los parámetros de estilo de flashvars a un archivo SWF cargado



actionscript-3 swfloader (4)

Tengo una aplicación Flex 3 (jugador v9) que carga un Flash SWF (AS3, también jugador v9) y necesita pasarle dinámicamente una colección de parámetros que se conocen en tiempo de ejecución. Estos son parámetros que normalmente se pasan a través del elemento flashvars en una página HTML. La película incrustada accede a estos parámetros a través del objeto loaderInfo.parameters .

Intenté usar las clases SWFLoader y Loader sin éxito en param-passing.

Detalles relevantes:

  • Es un programa local y no puede confiar en los parámetros de cadena de consulta.
  • Me loaderInfo.parameters["foo"] = "123" con la configuración de loaderInfo.parameters["foo"] = "123" desde el código de incrustación, pero el parámetro nunca parece terminar en la película incrustada.
  • No puedo colocar maquinaria extra para el control de parámetros en la (s) película (s) incrustada (s), ya que son creadas por terceros.

Al insertar un SWF en una página web, puede pasar flashvars como parámetros en la URL al SWF, ¿quizás lo mismo podría funcionar en su caso? Si el file:///some/path/to/a.swf SWF se encuentra en file:///some/path/to/a.swf intente con file:///some/path/to/a.swf?hello=world&foo=bar . Podría funcionar.


Pasar este parámetro en la URL no será de ayuda, ya que se toman con el código de JavaScript en html-wrapper. Los parámetros ''flashVars'' se toman utilizando los parámetros Application.application., por lo tanto, debe establecer estos parámetros manualmente en su caso.

Si está utilizando SWFLoader para cargar otra aplicación, debe crear el objeto, que representará la aplicación cargada y aplicará todo lo que necesite:

<mx:Script> <![CDATA[ import mx.managers.SystemManager; import mx.controls.Alert; import mx.events.FlexEvent; private var loadedApp:Application; private function onLoadComplete(event:Event):void { var smAppLoaded:SystemManager = SystemManager(event.target.content); smAppLoaded.addEventListener(FlexEvent.APPLICATION_COMPLETE, onLoadedAppComplete); } private function onLoadedAppComplete(event:FlexEvent):void { try { loadedApp = Application(event.target.application); if(!loadedApp) throw new Error(); loadedApp.parameters["param1"] = "value1"; } catch (e:Error) { Alert.show("Failed to get application loaded.", "Error", Alert.OK); } } private function onLoadError():void { Alert.show("Failed to load an application.", "Error", Alert.OK); } ]]> </mx:Script> <mx:SWFLoader width="100%" height="100%" source="./AppToLoad.swf" complete="onLoadComplete(event)" ioError="onLoadError()" securityError="onLoadError()" />


El motivo es simple Lo he descubierto hoy.

En el componente cargado a través de SWFloader parentApplication o parentApplication establece en la aplicación de nivel superior (este widget carga el componente a través de SWFLoader). Y el componente cargado puede ver flashvars establecidos en la aplicación de nivel superior. Esta es probablemente la causa de que establecer parámetros en SWFLoader no tenga ningún impacto.

He configurado flashvars adecuados en mi aplicación topplevel y también se ven en la versión cargada :-).


Me habría ahorrado mucho tiempo hoy si hubiera encontrado esta respuesta primero: AS3 Pase FlashVars a swf cargado .

Esencialmente: desde Flash Player 10.2 se han podido pasar flashvars a lo largo al establecerlos como parámetros en LoaderContext.