2010-02-20 15 views
7

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

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

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, que es el control de las variables de Flash como tal. Funciona bien de un lado html

this.loaderInfo.parameters.xml 
+0

Es una pregunta ambigua. Hay dos partes: 1) Cómo obtener FlashVars en B, que respondo a continuación. 2) Cómo pasar cualquier tipo de variables en B de A. –

Respuesta

0

puede agregar el flash vars en el URI cuando va a cargar se

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

El problema es que cuando cargó la cadena en la URI, se pone dentro de un objeto loaderInfo.parameters por lo que si desea pasar esos parámetros, debe crear una cadena para pasarlos a.

aquí hay un script desde 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)); 
+0

Gracias, pero olvidé mencionar, lo he intentado también y me da el mismo error. Vi una página mencionada porque pasar FlashVars no puede funcionar con swf local, ¿ese es el problema? – Robin

+0

No veo ninguna razón para que eso no funcione, pero puede probar "sandboxing" los permisos para la carpeta en la que se encuentra. – Daniel

0

¿Cómo caja de arena 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 simple como nuevo proyecto. 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); 
} 
+0

Encontré cuál es el problema. Funciona si ejecuto el swf en el reproductor flash normal, pero no la versión de depuración cuando inicio desde el editor con Ctrl + Intro. Pero no puedo depurar hmmm .. – Robin

+0

trace (Security.sandboxType), me da localTrusted. Agregué Security.allowInsecureDomain ("*") pero sigo sin ir. – Robin

17

Aunque el método de cadena de consulta debería funcionar bien a nivel local, si se va a utilizar Flash Player 10.2, hay una nueva API para esto.

var context:LoaderContext = new LoaderContext(); 
context.parameters = {'xml': 'test.xml'}; 
loader.load(request, context); 

La documentación está aquí: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/LoaderContext.html#parameters

+1

Ojalá pudiera votar diez veces ... –

+0

Parece ser eliminado de la API. 'parameters' no está definido :( – roberkules

+0

@roberkules ¿Está apuntando a la versión correcta de Flash? –

2

No es necesario que "A" FlashVars pasan a "B". Simplemente haga que B acceda a FlashVars. Lo siguiente funcionará tanto si B está dentro de A, como si está en el nivel superior:

Agregue un detector de eventos ADDED_TO_STAGE en el constructor de B. por ejemplo:

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

Cuando se tiene acceso a la etapa que ahora se puede acceder a las variables de Flash en A esta manera:

Para ver correctamente una variable llamada myVar FlashVar en B.swf, hacer (dentro 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 hay que mirar.

+0

gracias. La mejor solución en mi opinión. –

+0

Creo que sí, también :) –

Cuestiones relacionadas