Perdida de sesión al hacer una subida con FileReference

Perdida de sesión al hacer una subida con FileReference

Etiquetas: FileReference

Este bug / "comportamiento raro", se reproduce al hacer una subida desde flash con FileReference. Esta subida hace que se pierda la sesión en el servidor, lo que nos puede dar problemas si estamos utilizando el id de sesión para controlar las subidas de los usuarios.

Una solución es pasar por get el id de la sesión a la hora de hacer la subida:

  1.  
  2. var request:URLRequest=new URLRequest('archivo_subidor.php?id_sesion=' + id);
  3. fileReference.upload(request);
  4.  

y recrear la sesión en php con ese id:

  1.  
  2.   if(array_key_exists('id_sesion', $_REQUEST)) {
  3.   session_id($_REQUEST['id_sesion']);
  4.   }
  5.   session_start()

Mas información sobre el tema aquí, y gracias a Israel Pastrana por la info que me pasó en su día (se topó con el bug el mismo día que yo :D)

Error de seguridad al utilizar computeSpectrum

Error de seguridad al utilizar computeSpectrum

Etiquetas: computeSpectrum

Me topé con este error hace varios meses por casualidad. Siempre suelo tener abierto el player de Radio3, y notaba que cuando veía páginas Flash con algún ecualizador de sonido (utilizando computeSpectrum), me salía un error de seguridad en el debugger y no funcionaba la web en Flash.

No le dí mucha importancia hasta que me tocó programar un player para una web y tuve que utilizar computeSpectrum. Lo comenté en la lista de ASNativos, y Cay pasó este enlace:

http://bugs.adobe.com/jira/browse/FP-147

Resulta que es un error sin solución hasta el momento, asi que si alguna vez hacéis una aplicación que utilice computeSpectrum, tenedlo en cuenta: no funciona si tienes abierto un player de audio o video (youtube, vimeo...) en otra ventana.

Deseleccionar un grupo de radioButtons en Actionscript 3.0

Deseleccionar un grupo de radioButtons en Actionscript 3.0

Etiquetas: RadioButtonGroup RadioButton group

Deseleccionar un grupo de radioButtons en Actionscript 3.0

En este nuevo capítulo sobre las trampas de Flash/Actionscript vamos a ver como deseleccionar un grupo de radioButtons.

Si tenemos varios radioButtons en el escenario, antes de interactuar con ellos no hay ninguno seleccionado. Si seleccionamos uno, se marca y el resto se desmarcan, de manera que solamente puede haber un radioButton de grupo seleccionado.

¿Pero que ocurre si una vez seleccionado un radioButton, queremos que vuelvan a estar todos deseleccionados?

Pues que tenemos que utilizar algún truco, porque no hay ningún método en Actionscript 3.0 para deseleccionar un RadioButtonGroup.

El truco que yo utilizo es crear una instancia temporal de RadioButton, le asigno el grupo, y lo selecciono por código, liberando al resto de su selección:

  1.  
  2. import fl.controls.RadioButtonGroup;
  3.  
  4. var rg:RadioButtonGroup= Opcion1_rb.group;
  5.  
  6. Deseleccionar_bt.addEventListener(MouseEvent.CLICK,deseleccionar);
  7.  
  8. function deseleccionar(e:MouseEvent):void{
  9.  
  10. 	var tempR:RadioButton = new RadioButton()
  11. 	tempR.group = rg;
  12. 	tempR.selected = true;
  13.  
  14. }
  15.  
Problemas al cargar combobox en Actionscript 2.0

Problemas al cargar combobox en Actionscript 2.0

Esta trampa es una de esas alegrías que nos dá Flash de vez en cuando. La sorpresa se suele producir asi:

-Tenemos que hacer una película que luego vamos a cargar en otra película madre. En esta película "hija", utilizamos un combobox de los de Flash. Probamos nuestra película, y obtenemos algo parecido a esto:

-Una vez tenemos el SWF funcionando, probamos a cargarlo en la película madre, y obtenemos esto:

Como se puede ver, el combo está, aparece incluso la primera opción, pero no podemos desplegarlo.

La solución: hay que incluir una instancia de combobox en la biblioteca de la película principal.

Por suerte, esto sólo ocurre en Actionscript 2.0. En Actionscript 3.0 no hace falta tener el combo en la película principal.

Actionscript 2.0: Problemas al pasar de texto a número

Actionscript 2.0: Problemas al pasar de texto a número

Etiquetas: String Number parseInt

Esta "trampa" de Flash, la descubrí la semana pasada en uno de los foros de Cristalab.

Uno de los usuarios tenia problemas al pasar Strings a números en Actionscript 2.0, siempre que los Strings tuvieran algún cero por la izquierda. Por ejemplo, si en Actionscript 2.0 hacemos:

  1.  
  2. var cadena:String = "033";
  3. var numero:Number = Number(cadena);
  4. trace(numero);
  5.  

El trace devuelve...27.

Como ya pensaba que era alguna especie de bug maligno de Flash, de esos que surgen en los momentos de crisis y con los que pierdes una tarde tranquilamente, se me ocurrió solucionarlo eliminando los ceros iniciales con un while:

  1.  
  2. var cadena:String = "033";
  3. while(cadena.substr(0,1) == 0){ 
  4. 	cadena = cadena.substr(1,cadena.length-1); 
  5. }
  6. var numero:Number = Number(cadena);
  7. trace(numero);
  8.  

Devuelve 33.

Al mismo tiempo, Zguillez y Anduril encontraron la respuesta "lógica" a la maldad de Flash:

En Actionscript 2.0, si creas un número con un 0 como cifra inicial, Flash lo toma como número octal. Por eso "033" daba 27 al pasar a número:

033 = 3x8 + 3x1 = 27

Sabiendo esto, podemos convertir la cadena a entero en base 10, mediante la función parseInt, que recibe como parámetros la cadena y la base a la que queremos convertir el número:

  1.  
  2. var cadena:String = "033";
  3. var numero:Number = parseInt(cadena,10);
  4. trace(numero);
  5.  

Devuelve 33.

Por último, comentar que esto solo ocurre en Actionscript 2.0. Según la ayuda de Flash:

En ActionScript 3.0 la función Number() ya no admite números octales (de base 8). Si se suministra una cadena con un cero inicial a la función Number() de ActionScript 2.0, el número se interpreta como un número octal y se convierte en su equivalente decimal. Esto no es así con la función Number() de ActionScript 3.0, que omite el cero inicial.