Comunidad de diseño web y desarrollo en internet online

cargar SWF externo con stage distinto

Citar            
MensajeEscrito el 12 May 2010 05:12 pm
Buenos días comunidad de Cristalab, y moderadores :) les escribo por lo siguiente:

Tengo mi formulario swf, y aparte tengo una clase a la que he llamado Window, que me crea una ventana interna en el stage del formulario, la cosa está en que dentro de esa ventana tengo que cargar algunos .swf que habia creado anteriormente, y cada uno de esos .swf tienen variables, y llaman a otras clases, entonces pasa que el flash no diferencia que el stage principal, tiene diferentes variables, y valga la redundancia un stage diferente al que está dentro del objeto Window. para ser un poco mas explicativo le anexo un poco del código:
stage principal, fotograma 1

Código ActionScript :

var myWindow:Window= new Window(stage.stageWidth, stage.stageHeight);
myWindow.addEventListener("CERRAR",cierra_win);
addChild(myWindow);
function cierra_win(e:Event){ 
       //FUNCION PARA CERRAR EL WINDOW
   myWindow.close();   
}
//FUNCION PARA MOSTRAR LA VENTANA 'WINDOW'
myWindow.show("cambia_clave.swf", "Cambiar Clave");

clase Window

Código ActionScript :

package {
     //import .....
 public class Window extends Sprite {
      private var child:Sprite = new Sprite();
      private  var child1:Sprite = new Sprite();
      private  var childFondo:Sprite = new Sprite();
      private  var childTitulo:Sprite = new Sprite();
      private var titulo:TextField = new TextField();      
      private var contTitulo:String = "";
      private var path:String = "http://localhost/";
      public var xAncho:int = 100;
      public var xAlto:int = 100;
      public var escenaAncho:int = 0;
      private var boton:SimpleButton = new SimpleButton;
      public var escenaAlto:int = 0;
      public var contSwf:String = "";      
      public var myMovie:MovieClip = new MovieClip();
      public var loader:Loader = new Loader();
      public var myRequest:URLRequest;

  public function Window(ancho1:int, alto1:int) {            
      escenaAncho = ancho1;
      escenaAlto = alto1;
      creaFondo(child1);           
      boton.addEventListener(MouseEvent.CLICK, Cierra);
  }
  public function Cierra(event:MouseEvent):void {         
      dispatchEvent(new Event("CERRAR"));
   }
  public function close():void{           
      removeChild(child1);
      removeChild(child);
   }
  public function show(contenido:String, contenido2:String):void {      
      contSwf=contenido;
      contTitulo = contenido2;            
      myRequest= new URLRequest();
      myRequest.url = path+"swf/"+contSwf;      
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfCompleto);
      //AQUI ESTA MI PROBLEMA --->Donde coloco? Event.ADDED_TO_STAGE
      loader.load(myRequest);                        
         
   }
  public function swfCompleto(event:Event):void {         
      xAncho= event.currentTarget.width+60;
      xAlto= event.currentTarget.height+60;
      contenidoTexto();
      //draw DIBUJA EL FONDO DEL WINDOW
      draw(child);
      //Se agrega el titulo del window 
      tituloAlert(child);                           
      agregarTextos(child);         
       //Se crea un boton cerrar
      agregarBtn(child);
     //Aquí comienza el problema, cuando se agrega el compilador toma ese swf como el mismo stage
       child.addChild(myMovie).name = "myMovie";
      myMovie.addChild(loader).name = "loader";   
        //Posicionar en el centro
      child.x = int(escenaAncho /2) - int(xAncho / 2);
      child.y = int(escenaAlto /2) -int(xAlto /2);
      addChild(child1);
      addChild(child);
   }

    //bla bla bla otras funciones de dibujo
  
}//Class Window
}//package


Ahora que está un poco mas claro, pues he leído un poco y al parecer la solución es Event.ADDED_TO_STAGE, pero no sé como implementarlo :S, en lo que me puedan ayudar, por favor... Muchísimas Gracias de antemano.

Por freddydg

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 May 2010 05:33 pm
Algo no me cierra. La explicación de Stage es un poco confusa, supongo que referirás a scope y donde se está haciendo el addChild. Luego trucos como este:

child.addChild(myMovie).name = "myMovie";
myMovie.addChild(loader).name = "loader";

Me parecen bastante trickys para no poder explicar claramente el problema. ¿Da un error de objeto no definido al hacer el addChild? ¿El code que trae el swf pierde el scope por falta de encapsulación?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 May 2010 07:47 pm
OK, a ver si me explico mejor
1- Tengo un archivo .swf que es un formulario, con algunos textInput, unos Botones, Etc,
En uno de los botones llamo al objeto creado myWindow de la clase Window, con MyWindow.show("cambia_clave.swf", "Cambiar Clave");
2- La clase Window debe crear una ventana, con el titulo "cambiar clave" y en el centro de la ventana, agrega el "cambia_clave.swf"
3- El formulario "cambia_clave.swf" tiene declaraciones de variables en el primer fotograma, e inicializa a otros componentes textInput, y otros botones.

Al agregar al formulario "cambia_clave.swf" dentro de la clase Window con: myMovie.addChild(loader).name = "loader";
aparece el siguiente error al ejecutar:

*** Violación de la seguridad Sandbox ***
El dominio de seguridad 'http://localhost/prueba/proyecto/swf/cambia_clave.swf' ha intentado acceder al contexto incompatible 'file:///C|/wamp/www/prueba/proyecto/swf/admin.swf'
SecurityError: Error #2047: Violación de la seguridad Sandbox: parent: http://localhost/prueba/proyecto/swf/cambia_clave.swf no puede acceder a file:///C|/wamp/www/prueba/proyecto/swf/admin.swf.
at flash.display::DisplayObject/get parent()
at fl.core::UIComponent/get focusManager()
at fl.controls::TextInput/focusInHandler()

Por freddydg

16 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 May 2010 04:10 pm
Es un error del sandbox y no tiene nada que ver con confusión de Stage, un archivo cargado de red no puede cargar un archivo local y viceversa. Una forma práctica de evitar esto a nivel local (donde este caso sucede frecuentemente) es agregar el folder que estes usando a las carpetas seguras, para ello haces click derecho en tu swf y vas a settings, o directamente a esta page:

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

Luego agregas la carpeta de donde estás cargando las cosas y te evitas el error del sandbox

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 13 May 2010 06:10 pm
Listo, muchas gracias Jorge, por tu ayuda y tu tiempo prestado, si no fuera por estos foros y por la ayuda de moderadores como tú, pues muchos desarrolladores se verían estancados.

Por freddydg

16 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.