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 deloaderInfo.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.