actionscript 3 - que - Cargue AS2 SWF en AS3 SWF y pase vars en URL
swf download (5)
Lo estas haciendo mal.
" http: //domain/as2.swf? param = foo "
Es una solicitud para el archivo llamado as2.swf , en el servidor denominado dominio . Cualquiera de los parámetros ? Param = foo que forman parte de esa solicitud http se pierde cuando se completa la solicitud. Si el servidor necesita hacer algo de acuerdo con estas variables, lo haría, pero está pidiendo un archivo .swf para detectar estas variables, eso es una tontería.
Coloque una variable en su objeto global (espacio de nombres global) para el reproductor flash, y luego cuando se carga as2 .swf en ese reproductor flash, tendrá acceso a la variable que configuró en su objeto global.
No soy competente en as2, pero en as3, se puede acceder al objeto Global con la palabra clave this , a nivel de paquete (probablemente sea igual para as2, simplemente no se preocupe por configurarlo a nivel de paquete).
Tengo un SWF AS3 en el que voy a cargar otros archivos SWF. Estos archivos SWF secundarios toman todos un solo parámetro en la URL. Parece que no puedo ponerlo en funcionamiento cuando cargo un dispositivo AS2 y es necesario que pueda manejar ambos.
así que tengo
var request:URLRequest = new URLRequest();
var loader:URLLoader = new URLLoader();
request.url = "http://domain/as2.swf?param=foo";
loader.load(request);
// etc on to the eventListeners, addChild, etc
Cuando se carga el archivo SWF as2, no puede ver el parámetro que le he pasado. Está buscando _root.param. ¿Estoy haciendo esto mal o estoy intentando lo imposible?
EDITAR: Debería añadir que puedo cargar un archivo SWF con esos parámetros de URL desde un cargador AS2 y funciona muy bien.
No es trivial para comunicarse entre AS2 y AS3 ya que se ejecutan en diferentes máquinas virtuales. Consulte este http://www.gskinner.com/blog/archives/2007/07/swfbridge_easie.html para obtener algunas sugerencias.
Editar: si no puede cambiar el contenido as2 cargado, su única opción es crear un cargador ''wrapper'' as2 que use el ejemplo vinculado anterior para comunicarse con el as3 e interfaces con el contenido as2 cargado usando _root.varname Esto no es bonito, pero podría solo trabajo.
Podría valer la pena intentar asignar las variables dinámicamente después de que se haya cargado el archivo SWF, pero antes de agregarlo al escenario. Es decir.
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, movieLoaded);
function movieLoadedHandler(event : Event) : void
{
var loaderInfo : LoaderInfo = event.target as LoaderInfo;
var clip : DisplayObject = loaderInfo.content;
for each(var prop in varsToTransfer)
{
clip[prop] = varsToTransfer[prop];
}
// add to parent
}
Déjame saber cómo va eso.
AS3 -> AS3
Película 1 (www.domain1.com): cargue la película externa cuando haga clic en el botón "comprar" ...
buy.addEventListener(MouseEvent.CLICK,function(){
var ldr:Loader = new Loader();
var url:String = "http://www.domain2.com/movie.swf?a=b&c=d";
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);
});
Película 2 ( http://www.domain2.com/movie.swf ):
var mc:MovieClip = this as MovieClip;
var ldi:LoaderInfo = mc.loaderInfo;
var lobj:Object = ldi.parameters as Object;
for (var l in lobj) {
dumper.htmlText += l+" => "+lobj[l]+"<br />";
}
"volcado" es el nombre del campo Dynamic Textbox ubicado en Movie2. La salida debería verse así:
a => b
c => d
En lugar de buscar _root.param, use _root._url y luego analice sus parámetros a mano.
var url: String = _root._url;
var param: String = ''param='';
var paramStart: Number = url.lastIndexOf(param);
var paramValue: String = url.substring(paramStart + param.length, url.length);
trace(paramValue);
SWFBridge es increíble y exagerado por algo como esto.