Adobe Air - 1.5 Instruction Manual [es]

Desarrollo de aplicaciones de ADOBE® AIR™ 1.5 con ADOBE
®
FLASH
CS4 PROFESSIONAL
Copyright
© 2008 Adobe Systems Incorporated. Todos los derechos reservados.
Desarrollo de aplicaciones de Adobe
® AIR 1.5 con Adobe® Flash® CS4
Si esta guía se distribuye con software que incluye un contrato de licencia de usuario final, la guía, así como el software descrito en ella, se proporciona con una licencia y sólo puede usarse o copiarse en conformidad con los términos de dicha licencia. Con la excepción de lo permitido por la licencia, ninguna parte de esta guía puede ser reproducida, almacenada en un sistema de recuperación de datos ni transmitida de ninguna forma ni por ningún medio, ya sea electrónico, mecánico, de grabación o de otro tipo, sin el consentimiento previo por escrito de Adobe Systems Incorporated. Tenga en cuenta que el contenido de esta guía está protegido por las leyes de derechos de autor aunque no se distribuya con software que incluya un contrato de licencia de usuario final.
El contenido de esta guía se proporciona exclusivamente con fines informativos, está sujeto a cambios sin previo aviso y no debe interpretarse como un compromiso de Adobe Systems Incorporated. Adobe Systems Incorporated no asume ninguna responsabilidad por los errores o imprecisiones que puedan existir en el contenido informativo de esta guía.
Recuerde que las ilustraciones o imágenes existentes que desee incluir en su proyecto pueden estar protegidas por las leyes de derechos de autor. La incorporación no autorizada de este material en sus trabajos puede infringir los derechos del propietario de los derechos de autor. Asegúrese de obtener los permisos necesarios del propietario de los derechos de autor.
Las referencias a nombres de empresas que aparecen en las plantillas de ejemplo sólo tienen fines ilustrativos y no pretenden hacer referencia a ninguna organización real ni a personas concretas.
Adobe, the Adobe logo, Acrobat, ActionScript, Adobe AIR, ColdFusion, Dreamweaver, Flash, Flex, Flex Builder, and Reader are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Microsoft and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Apple, Macintosh, and Mac OS are trademarks of Apple Inc., registered in the United States and other countries. Java is a trademarks or registered trademark of Sun Microsystems, Inc. in the United States and other countries. Linux is the registered trademark of Linus Torvalds in the U.S. and other countries. All other trademarks are the property of their respective owners.
This work is licensed under the Creative Commons Attribution Non-Commercial 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/us/
This product includes software developed by the Apache Software Foundation (
MPEG Layer-3 audio compression technology licensed by Fraunhofer IIS and Thomson Multimedia (
Speech compression and decompression technology licensed from Nellymoser, Inc. (
http://www.apache.org/)
http://www.mp3licensing.com).
www.nellymoser.com)
Video compression and decompression is powered by On2 TrueMotion video technology. © 1992-2005 On2 Technologies, Inc. All Rights Reserved. http://www.on2.com.
This product includes software developed by the OpenSymphony Group (
http://www.opensymphony.com/)
This product contains either BSAFE and/or TIPEM software by RSA Security, Inc.
Sorenson Spark™ video compression and decompression technology licensed from Sorenson Media, Inc.
This product includes software developed by the IronSmith Project (
http://www.ironsmith.org/).
Adobe Systems Incorporated, 345 Park Avenue, San Jose, California 95110, USA.
Notice to U.S. Government End Users. The Software and Documentation are “Commercial Items,” as that term is defined at 48 C.F.R. §2.101, consisting of “Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202, as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States. Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA. For U.S. Government End Users, Adobe agrees to comply with all applicable equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans Readjustment Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts 60-1 through 60-60, 60-250, and 60-741. The affirmative action clause and regulations contained in the preceding sentence shall be incorporated by reference.

Contenido

Capítulo 1: Instalación de Adobe AIR
Instalación de Adobe AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Desinstalación de Adobe AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Instalación y ejecución de las aplicaciones de AIR de muestra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Capítulo 2: Configuración de Flash CS3 para Adobe AIR
Requisitos del sistema para la Actualización de Adobe AIR para Flash CS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Instalación de la actualización de Adobe AIR para Flash CS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Desinstalación de la actualización de Adobe AIR para Flash CS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Influencia de AIR en Flash CS3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Capítulo 3: Presentación de Adobe AIR
Novedades de AIR 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Novedades de AIR 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Capítulo 4: Recursos sobre AIR
iii
Capítulo 5: Creación de su primera aplicación de AIR en Flash CS3 o CS4
Creación de la aplicación Hello World en Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Prueba de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Conversión de un archivo FLA en una aplicación de Adobe AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Capítulo 6: Actualización de Adobe AIR para Flash CS3 Professional
Creación de un archivo de Adobe AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Configuración de publicación de Adobe AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Vista previa de una aplicación de Adobe AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Depuración de una aplicación de Adobe AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Creación de archivos de aplicación e instalador de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Creación de un archivo descriptor de aplicación personalizado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Firma de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Capítulo 7: Seguridad en AIR
Aspectos básicos de la seguridad de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Instalación y actualizaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Entornos limitados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Seguridad en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Creación de scripts entre contenido en diferentes dominios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Escritura en el disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Cómo trabajar de forma segura con contenido que no es de confianza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Prácticas recomendadas de seguridad para desarrolladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Firma de código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Capítulo 8: Configuración de las propiedades de una aplicación de AIR
Estructura del archivo descriptor de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Definición de propiedades en el archivo descriptor de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Contenido
Capítulo 9: Funcionalidad específica de Adobe AIR
Clases específicas de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Clases del motor de ejecución con funcionalidad específica de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Clases del marco de supervisión del servicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Capítulo 10: Trabajo con ventanas nativas
Información adicional sobre ventanas nativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Aspectos básicos de ventanas de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Creación de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Gestión de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Detección de eventos de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Visualización de ventanas a pantalla completa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Capítulo 11: Pantallas
Información suplementaria en línea sobre las pantallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Aspectos básicos de las pantallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Enumeración de las pantallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Capítulo 12: Trabajo con menús nativos
Información adicional en línea de menús nativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Aspectos básicos del menú AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Creación de menús nativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Menús contextuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Menús contextuales en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Definición de menús nativos de forma descriptiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Visualización de menús emergentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Gestión de eventos de menú . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Ejemplo: Menú de ventana y de aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
iv
Capítulo 13: Iconos de la barra de tareas
Información adicional en línea sobre los iconos de la barra de tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Iconos de la barra de tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Iconos del Dock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Iconos de la bandeja del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Botones e iconos de la barra de tareas de la ventana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Capítulo 14: Trabajo con el sistema de archivos
Información suplementaria en línea sobre la API de archivos de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Aspectos básicos de los archivos de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Trabajo con objetos File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Obtención de información sobre el sistema de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Trabajo con directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Trabajo con archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Lectura y escritura de archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Capítulo 15: Arrastrar y colocar
Información suplementaria en línea sobre la función de arrastrar y colocar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Aspectos básicos de arrastrar y colocar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Contenido
Compatibilidad con el gesto de arrastrar hacia fuera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Compatibilidad con el gesto de arrastrar hacia dentro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Arrastrar y colocar en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Capítulo 16: Copiar y pegar
Información suplementaria en línea sobre la función de copiar y pegar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Copiar y pegar en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Comandos de menú y pulsaciones de teclas para copiar y pegar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Capítulo 17: Trabajo con conjuntos de bytes
Lectura y escritura de un ByteArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Ejemplo de ByteArray: Lectura de un archivo .zip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Capítulo 18: Trabajo con bases de datos SQL locales
Información adicional en línea sobre bases de datos SQL locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Bases de datos SQL locales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Creación y modificación de una base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Manipulación de los datos de una base de datos SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Utilización de operaciones sincrónicas y asíncronas de base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Uso del cifrado con bases de datos SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Estrategias para la utilización de bases de datos SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
v
Capítulo 19: Almacenamiento de datos cifrados
Capítulo 20: Entorno HTML
Información general sobre el entorno HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Extensiones de AIR y WebKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Capítulo 21: Programación en HTML y JavaScript
Información sobre la clase HTMLLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Cómo evitar errores de JavaScript relacionados con la seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Acceso a las clases de API de AIR desde JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Información sobre URL en AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Disponibilidad de objetos ActionScript en JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Acceso a objetos JavaScript y DOM HTML desde ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Incorporación de contenido SWF en HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Utilización de las bibliotecas de ActionScript en una página HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
Conversión de los objetos Date y RegExp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Manipulación de una hoja de estilo HTML de ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Utilización de scripts entre contenidos en diferentes entornos limitados de seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Capítulo 22: Gestión de eventos asociados con HTML
Eventos HTMLLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Gestión de eventos DOM con ActionScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Respuesta a excepciones en JavaScript sin capturar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Gestión de eventos del motor de ejecución con JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Contenido
Capítulo 23: Utilización de scripts en el contenedor HTML
Propiedades de visualización de objetos HTMLLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Desplazamiento de contenido HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Acceso a la lista del historial HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Configuración del agente de usuario que se utiliza al cargar contenido HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Configuración de la codificación de caracteres para utilizar con el contenido HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Definición de interfaces de usuario del navegador para el contenido HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Creación de subclases de la clase HTMLLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Capítulo 24: Cómo añadir contenido PDF
Detección de la capacidad de PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Carga de contenido PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Uso de scripts con el contenido PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Limitaciones conocidas del contenido PDF en AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Capítulo 25: Utilización de la administración de derechos digitales
Información suplementaria en línea sobre la administración de derechos digitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Aspectos básicos del flujo de trabajo con FLV cifrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Eventos y miembros relacionados con DRM de la clase NetStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Utilización de la clase DRMStatusEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Utilización de la clase DRMAuthenticateEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Utilización de la clase DRMErrorEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Utilización de la clase DRMManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Utilización de la clase DRMContentData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
vi
Capítulo 26: Opciones de inicio y cierre de aplicaciones
Invocación de aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Captura de argumentos de la línea de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Inicio de aplicaciones al iniciar sesión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Invocación desde el navegador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Cierre de una aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Capítulo 27: Lectura de la configuración de una aplicación
Lectura del archivo descriptor de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Obtención de los identificadores de la aplicación y del editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Capítulo 28: Trabajo con información sobre el motor de ejecución y el sistema operativo
Gestión de asociaciones con archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Obtención de la versión y el nivel de revisión del motor de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Detección de las capacidades de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Seguimiento de la presencia de usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Capítulo 29: Supervisión de la conectividad de la red
Detección de cambios de conectividad de la red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Aspectos básicos de la supervisión del servicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Detección de la conectividad de HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Detección de la conectividad de sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Contenido
Capítulo 30: Peticiones de URL y redes
Utilización de la clase URLRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Cambios en la clase URLStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Apertura de una dirección URL en el navegador Web predeterminado del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Capítulo 31: Comunicación entre aplicaciones
Capítulo 32: Distribución, instalación y ejecución de aplicaciones de AIR
Instalación y ejecución de una aplicación de AIR desde el escritorio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
Instalación y ejecución de aplicaciones de AIR desde una página Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Implementación en la empresa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Firma digital de archivos de AIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Capítulo 33: Actualización de aplicaciones de AIR
Actualización de aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Presentación de interfaz de usuario de actualización personalizada de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Descarga de un archivo de AIR en el equipo del usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Comprobar si una aplicación se está ejecutando por primera vez . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Utilización del marco de actualización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
vii
Capítulo 34: Localización de aplicaciones de AIR
Introducción a la localización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Localización del nombre y la descripción en el instalador de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Elección de una configuración regional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Localización de contenido de Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Localización de contenido HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Localización de fechas, horas y monedas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Capítulo 35: Creación de aplicaciones de AIR con las herramientas de la línea de comandos
Utilización de AIR Debug Launcher (ADL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Empaquetado de archivos de instalación de AIR con AIR Developer Tool (ADT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Firma de un archivo de AIR para cambiar el certificado de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Creación de certificados con firma automática con ADT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Utilización de Apache Ant con las herramientas del SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Índice . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

Capítulo 1: Instalación de Adobe AIR

Adobe® AIR™ permite ejecutar aplicaciones de AIR en el escritorio. El motor de ejecución se puede instalar de cualquiera de las formas siguientes:
Mediante la instalación independiente del motor de ejecución (sin instalar además una aplicación de AIR).
Mediante la instalación de una aplicación de AIR por primera vez (aparecerá un mensaje sugiriendo que se instale
el motor de ejecución).
Mediante la instalación de un entorno de desarrollo de AIR como el kit de desarrollo de software de AIR, Adobe®
Flex™ Builder™ 3 o el kit de desarrollo de software de Adobe Flex™ 3 (que incluye las herramientas de desarrollo de la línea de comandos de AIR).
El motor de ejecución sólo necesita instalarse una vez en cada ordenador.
Los requisitos del sistema para instalar AIR y ejecutar aplicaciones de AIR se describen en: Adobe AIR: Requisitos del
sistema (http://www.adobe.com/es/products/air/systemreqs/).
1

Instalación de Adobe AIR

Siga estas instrucciones para descargar e instalar las versiones de AIR para Windows®, Mac OS X y Linux.
Para actualizar el motor de ejecución, el usuario debe contar con privilegios de administrador del ordenador.
Instalación del motor de ejecución en un ordenador con Windows
1 Descargue el archivo de instalación del motor de ejecución.
2 Haga doble clic en el archivo de instalación del motor de ejecución.
3 Siga las indicaciones que aparecen en la ventana de instalación para llevar a cabo la instalación.
Instalación del motor de ejecución en un ordenador con Mac
1 Descargue el archivo de instalación del motor de ejecución.
2 Haga doble clic en el archivo de instalación del motor de ejecución.
3 Siga las indicaciones que aparecen en la ventana de instalación para llevar a cabo la instalación.
4 Si el instalador presenta una ventana de autenticación, escriba el nombre de usuario y la contraseña que utiliza para
Mac OS.
Instalación del motor de ejecución en un ordenador con Linux
1 Descargue el archivo de instalación del motor de ejecución.
2 Establezca los permisos de archivo para que se pueda ejecutar la aplicación de instalación:
Desde una línea de comandos, puede definir los permisos de archivo con el comando Algunas versiones de Linux permiten establecer permisos de archivo en el cuadro de diálogo de propiedades que se abre mediante un menú contextual.
chmod +x installer.bin.
3 Ejecute el instalador desde la línea de comandos o haciendo doble clic en el archivo de instalación.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
4 Siga las indicaciones que aparecen en la ventana de instalación para llevar a cabo la instalación.
AIR se instala como paquete rpm o dpkg, con los nombres: ejecución de un servidor X. AIR registra el tipo mime:
package+zip.
adobeairv.n y adobecerts. La instalación requiere la
application/vnd.adobe.air-application-installer-
Instalación de Adobe AIR

Desinstalación de Adobe AIR

Una vez instalado el motor de ejecución, se puede desinstalar siguiendo los procedimientos que se explican a continuación.
Desinstalación del motor de ejecución en un ordenador con Windows
1 En el menú Inicio de Windows, seleccione Configuración > Panel de control.
2 Seleccione la opción Agregar o quitar programas.
3 Seleccione “Adobe AIR” para desinstalar el motor de ejecución.
4 Haga clic en el botón Cambiar o quitar.
2
Desinstalación del motor de ejecución en un ordenador con Mac
Haga doble clic en el archivo de desinstalación de Adobe AIR, que se encuentra en la carpeta
/Aplicaciones/Utilidades.
Desinstalación del motor de ejecución en un ordenador con Linux
Realice uno de los siguientes pasos:
Seleccione el comando“Desinstalador de Adobe AIR” en el menú Aplicaciones.
Ejecute el instalador de AIR con la opción -uninstall.
Elimine los paquetes de AIR (adobeairv.n y adobecerts) con el administrador de paquetes.

Instalación y ejecución de las aplicaciones de AIR de muestra

Hay algunas aplicaciones de muestra a disposición para demostrar las funciones de AIR. Para tener acceso a las mismas e instalarlas, siga estas instrucciones:
1 Descargue y ejecute las aplicaciones de AIR de muestra. Están a disposición tanto las aplicaciones compiladas como
el código fuente.
2 Para descargar y ejecutar una aplicación de muestra, haga clic en el botón Instalar ahora de la aplicación. Un
mensaje indica instalar y ejecutar la aplicación.
3 Si opta por descargar aplicaciones de muestra y ejecutarlas más adelante, seleccione los vínculos de descarga. Las
aplicaciones de AIR pueden ejecutarse en cualquier momento de la siguiente manera:
En Windows, haga doble clic en el icono de la aplicación que se encuentra en el escritorio o seleccione la
aplicación en el menú Inicio.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Instalación de Adobe AIR
En Mac OS, haga doble clic en el icono de la aplicación, que se instala por omisión en la carpeta Aplicaciones de
su directorio de usuario (por ejemplo, en Macintosh HD/Usuarios/UsuarioFicticio/Aplicaciones/).
En Linux, haga doble clic en el icono de la aplicación que se encuentra en el escritorio o seleccione la aplicación
en el menú de aplicaciones. Las aplicaciones de AIR se instalan en su propia carpeta en el directorio
/opt.
Nota: revise las notas de versión de AIR por si hubiera alguna actualización de estas instrucciones. Puede encontrarlas en: http://www.adobe.com/go/learn_air_relnotes_es.
3

Capítulo 2: Configuración de Flash CS3 para Adobe AIR

La actualización de Adobe® AIR™ para Adobe® Flash® CS3 Professional aumenta el entorno de desarrollo de Flash con elementos que permiten al usuario crear aplicaciones de AIR con Flash. Permite crear, probar y depurar archivos de aplicaciones de AIR en Flash.
Adobe® Flash® CS4 Professional puede crear aplicaciones de AIR, ya que lo admite de forma nativa. Para obtener más información, consulte Publicación para Adobe AIR en Utilización de Flash.
La actualización de Adobe AIR para Flash CS3 admite AIR 1.0 y 1.1 y Flash Player 9.x. Flash CS4 es necesario para desarrollar aplicaciones con AIR 1.5 y Flash Player 10.

Requisitos del sistema para la Actualización de Adobe AIR para Flash CS3

4
Para poder utilizar Flash CS3 en el desarrollo y la ejecución de aplicaciones de AIR, debe tener el siguiente software instalado:
Flash CS3 Professional
Si no dispone de una copia de Flash CS3 Professional, puede adquirirla en el sitio Web de Adobe:
http://www.adobe.com/es/products/flash/
Adobe AIR
Para obtener información sobre la instalación de Adobe AIR, consulte “Instalación de Adobe AIR” en la página 1.
Actualización de Adobe AIR para Flash CS3
Si tiene instalada una versión anterior de la actualización de Adobe AIR para Flash CS3, siga los pasos que se describen en Desinstalación de la actualización de Adobe AIR para Flash CS3 para desinstalarla. Si no tiene instalada ninguna actualización de Adobe AIR para Flash CS3, continúe con los pasos de la sección “Instalación de la actualización de
Adobe AIR para Flash CS3” en la página 4.

Instalación de la actualización de Adobe AIR para Flash CS3

Antes de instalar la actualización de Adobe AIR para Flash CS3, salga de Flash y de todos los navegadores que tenga abiertos.
Descargue la actualización de Adobe AIR para Flash CS3.
Una vez descargada la actualización, haga doble clic en el archivo para instalarlo.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de Flash CS3 para Adobe AIR

Desinstalación de la actualización de Adobe AIR para Flash CS3

Si tiene instalada una versión anterior de la actualización de Adobe AIR para Flash CS3, siga estos pasos para desinstalarla antes de instalar la nueva actualización de Adobe AIR para Flash CS3.
1 Elimine la siguiente carpeta:
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\AIK
(Mac) HD:/Aplicaciones/Adobe Flash CS3/AIK
2 Vaya a la siguiente ubicación:
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\<idioma>\First Run\Commands\
(Mac) HD:/Aplicaciones/Adobe Flash CS3/First Run/Commands
y elimine las siguientes carpetas/archivos:
Carpeta AIR
AIR - Application and Installer Settings.jsfl
AIR - Create AIR File.jsfl
3 Elimine el siguiente archivo:
5
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\<idioma>\Configuration\External Libraries\FLAir.dll
(Mac) HD:/Aplicaciones/Adobe Flash CS3/Configuration/External Libraries/FLAir.bundle.
4 Elimine el siguiente archivo:
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\<idioma>\Configuration\Players\AdobeAIR1_0.xml
(Mac) HD:/Aplicaciones/Adobe Flash CS3/Configuration/Players/ AdobeAIR1_0.xml
5 Vaya a la siguiente ubicación:
(Windows) Disco duro:\Document and Settings\<nombre de usuario>\Local Settings\Application Data\Adobe\Flash CS3\<idioma>\Configuration\Commands\
(Mac) HD:/Usuarios/<nombre de usuario>/Librería/Application Support/Adobe/Flash CS3/<idioma>/Configuration/Commands/
y elimine las siguientes carpetas/archivos:
Carpeta AIR
AIR - Application and Installer Settings.jsfl
AIR - Create AIR File.jsfl
Nota: si no ve la ubicación especificada en Windows, active la opción "Mostrar archivos/carpetas ocultos" en Opciones de carpeta.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de Flash CS3 para Adobe AIR

Influencia de AIR en Flash CS3

Tras instalar la actualización de Adobe AIR, comprobará los cambios siguientes en Flash:
En la ficha Flash del cuadro de diálogo Configuración de publicación (Archivo -> Configuración de publicación),
hay una nueva entrada en el menú Versión de Adobe AIR 1.0.
Una pantalla de bienvenida actualizada con una entrada para crear un archivo de Flash (Adobe AIR).
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\en\FirstRun\StartPage
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\en\FirstRun\StartPage\resources
Nota: si instala la aplicación en un ordenador Macintosh, si no aparece la opción Archivo de Flash (Adobe AIR) en la pantalla de bienvenida, elimine la siguiente carpeta y reinicie Flash:
HD:/Usuarios/<nombre de usuario>/Librería/Application Support/Adobe/Flash CS3/<idioma>/Configuration/StartPage
Un nuevo archivo playerglobal.swc que incluye todas las API de ActionScript 3.0 y de Adobe AIR en la carpeta
ActionScript 3.0/Classes.
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\en\Configuration\ActionScript 3.0 Classes
6
(Mac) HD:/Aplicaciones/Adobe Flash CS3/Configuration/ActionScript 3.0/Classes/
Nuevos archivos jsfl (AIR - Application and Installer Settings.jsfl, AIR - Publish AIR File.jsfl)
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\en\FirstRun\Commands
(Mac) HD:/Aplicaciones/Adobe Flash CS3/First Run/Commands/
Kit de desarrollo de software de Adobe AIR (AIK)
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\AIK
Biblioteca externa
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\en\Configuration\External Libraries
(Mac) HD:/Aplicaciones/Adobe Flash CS3/Configuration/External Libraries/
Archivo de configuración de destino
(Windows) Disco duro:\Archivos de programa\Adobe\Adobe Flash CS3\en\Configuration\Players\
(Mac) HD:/Aplicaciones/Adobe Flash CS3/Configuration/Players

Capítulo 3: Presentación de Adobe AIR

Adobe® AIR™ es un motor de ejecución válido para todos los sistemas operativos que le permite aprovechar sus habilidades de desarrollo Web existentes (Adobe® Flash® CS3 Professional, Adobe® Flash® CS4 Professional, Adobe® Flex™, Adobe® ActionScript® 3.0, HTML, JavaScript®, Ajax) para crear e implementar aplicaciones de Internet enriquecidas (RIA) en el escritorio.
Para obtener más información sobre el uso y una introducción a Adobe AIR, consulte Adobe AIR Developer Connection http://www.adobe.com/devnet/air/ (Centro de desarrollo de Adobe AIR) (en inglés).
AIR permite trabajar en entornos que le son familiares para aprovechar las herramientas y los métodos que le resulten más cómodos. Su compatibilidad con Flash, Flex, HTML, JavaScript y Ajax le brinda la mejor experiencia posible para satisfacer sus necesidades.
Por ejemplo, se pueden desarrollar aplicaciones utilizando una de las tecnologías siguientes o combinando varias de ellas:
Flash/Flex/ActionScript
HTML/JavaScript/CSS/Ajax
PDF (que puede aprovecharse con cualquier aplicación)
7
En consecuencia, las aplicaciones de AIR pueden ser:
basadas en Flash o Flex: aplicación cuyo contenido raíz es Flash/Flex (SWF);
basadas en Flash o Flex con HTML o PDF. Aplicaciones cuyo contenido raíz es Flash/Flex (SWF) y que incluyen
contenido HTML (HTML, JS, CSS) o PDF;
basadas en HTML. Aplicación cuyo contenido raíz es HTML, JS, CSS;
basadas en HTML con Flash/Flex o PDF. Aplicaciones cuyo contenido raíz es HTML y que incluyen contenido de
Flash/Flex (SWF) o PDF.
Los usuarios interactúan con las aplicaciones de AIR de la misma forma en que interactúan con las aplicaciones de escritorio nativas. El motor de ejecución se instala una vez en el ordenador del usuario y después se instalan y ejecutan las aplicaciones de AIR como cualquier otra aplicación de escritorio.
El motor de ejecución ofrece una arquitectura y plataforma compatibles con distintos sistemas operativos para la implementación de aplicaciones. La compatibilidad y constancia del funcionamiento y las interacciones en distintos escritorios obvia la necesidad de realizar pruebas en distintos navegadores. En lugar de desarrollar programas para un sistema operativo determinado, el desarrollador centra sus esfuerzos en el motor de ejecución, lo cual ofrece las siguientes ventajas:
Las aplicaciones desarrolladas para AIR se ejecutan en varios sistemas operativos distintos sin suponer trabajo
adicional para el desarrollador. El motor de ejecución asegura una presentación e interacciones constantes y predecibles en todos los sistemas operativos compatibles con AIR.
La creación de aplicaciones se agiliza gracias a que se pueden aprovechar las tecnologías Web y los diseños
existentes, así como extender las aplicaciones Web al escritorio sin necesidad de aprender las tradicionales tecnologías de desarrollo del escritorio o la complejidad del código nativo.
El desarrollo de aplicaciones resulta más fácil que cuando se utilizan lenguajes de nivel inferior como C y C++. No
hace falta gestionar las complejas API de nivel inferior que son específicas para cada sistema operativo.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Presentación de Adobe AIR
Al desarrollar aplicaciones para AIR se puede aprovechar un juego enriquecido de arquitecturas e interfaces API:
API específicas para AIR proporcionadas por el motor de ejecución y la arquitectura de AIR
API de ActionScript utilizadas en archivos SWF y la arquitectura de Flex (además de otras bibliotecas y
arquitecturas basadas en ActionScript)
HTML, CSS y JavaScript
La mayoría de las arquitecturas de Ajax
AIR es toda una novedad en la forma de crear, implementar y experimentar las aplicaciones. Permite tener un mayor control creativo y extender al escritorio las aplicaciones basadas en Flash, Flex, HTML y Ajax sin necesidad de aprender las tradicionales tecnologías de desarrollo del escritorio.

Novedades de AIR 1.1

Adobe AIR 1.1 ha introducido las siguientes nuevas capacidades:
La instalación y otros cuadros de diálogo del motor de ejecución se han traducido a los siguientes idiomas:
Portugués brasileño
Chino (tradicional y simplificado)
Francés
Alemán
Italiano
Japonés
Coreano
Ruso
Francés
Español
Compatibilidad con la creación de aplicaciones internacionalizadas, incluyendo acciones de teclado para idiomas
de doble byte. Consulte “Localización de aplicaciones de AIR” en la página 347.
Compatibilidad para localizar los atributos de nombre y descripción en el archivo descriptor de la aplicación.
Compatibilidad para localizar mensajes de error como, por ejemplo, SQLError.detailID y
SQLError.detailArguments, en la base de datos SQLite.
Incorporación de la propiedad Capabilities.languages para obtener un conjunto de idiomas de IU preferidos
como se establece mediante el sistema operativo.
Los menús predeterminados y las etiquetas de botón HTML como, por ejemplo, menús contextuales y la barra
de menú de Mac, se han localizado a todos los idiomas compatibles.
Compatibilidad para la migración de certificados de una aplicación con firma automática a otra que se encadena
con una entidad emisora de certificados (CA).
Compatibilidad con Microsoft Windows XP Tablet PC Edition y con ediciones de 64 bits de Windows Vista® Home
Premium, Business, Ultimate o Enterprise.
Incorporación de la API File.spaceAvailable para obtener la cantidad de espacio en disco disponible en un disco.
8
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Presentación de Adobe AIR
Incorporación de la propiedad NativeWindow.supportsTransparency para establecer si una ventana se puede
dibujar como transparente mediante el sistema operativo actual.
Para obtener más información sobre la versión de AIR 1.1, consulte las notas de versión de Adobe AIR 1.1 (http://www.adobe.com/go/learn_air_relnotes_es).

Novedades de AIR 1.5

Adobe AIR 1.5 presenta las siguientes nuevas funciones:
Compatibilidad con las siguientes funciones de Flash Player 10.
Efectos y filtros personalizados
API de dibujo avanzada
Generación dinámica de sonido
Tipo de datos vectoriales
API mejorada de carga y descarga de archivos
Protocolo RTMFP (Real Time Media Flow Protocol) de flujo de medios en tiempo real
Efectos 3D
Compatibilidad para texto avanzado
Administración de color
Motor de texto
Transmisión de flujo dinámica
Códec de audio Speex
9
Para obtener más información, consulte http://www.adobe.com/es/products/flashplayer/features/ para ver más datos sobre estas funciones.
Idiomas adicionales admitidos en el instalador de AIR 1.5 y otros cuadros de diálogo del motor de ejecución: checo,
neerlandés, sueco, turco y polaco.
Cifrado de la base de datos.
Los archivos de base de datos se pueden cifrar en AIR 1.5. Todo el contenido de base de datos, incluyendo los metadatos, se pueden cifrar para que la información no se pueda leer fuera de la aplicación de AIR que la cifró. Esta función permitirá que los desarrolladores cifren, descifren y vuelvan a cifrar archivos de base de datos. Consulte “Almacenamiento de datos cifrados” en la página 216.
La versión de WebKit utilizada por Adobe AIR se ha actualizado y ahora incluye compatibilidad para el intérprete
de JavaScript, SquirrelFish.
Nuevas API de validación de firmas XML que se pueden utilizar para ayudar a verificar la integridad y la identidad
del firmante de los datos o información. Consulte la validación de firmas XML.
Para obtener más información sobre la versión de AIR 1.5, consulte las notas de versión de Adobe AIR 1.5 (http://www.adobe.com/go/learn_air_relnotes_es).

Capítulo 4: Recursos sobre AIR

Para obtener más información sobre el desarrollo de aplicaciones de Adobe® AIR™, consulte los recursos siguientes:
Fuente Ubicación
Programación con ActionScript 3.0 http://www.adobe.com/go/learn_fl_cs4_programmingAS3_es
10
Referencia del lenguaje y componentes ActionScript 3.0 (incluye AIR)
Guías de inicio rápido de Adobe AIR para Flash http://www.adobe.com/go/learn_air_flash_qs_es
Utilización de Flash http://www.adobe.com/go/learn_fl_cs4_using_es
Utilización de componentes ActionScript 3.0 http://www.adobe.com/go/learn_fl_cs4_as3components_es
http://www.adobe.com/go/learn_flashcs4_langref_es
Encontrará artículos, muestras y presentaciones por expertos tanto de Adobe como de la comunidad en el Centro de desarrollo de Adobe AIR en http://www.adobe.com/es/devnet/air/. También se puede descargar de ahí Adobe AIR y software asociado.
Hay una sección específicamente dirigida a los desarrolladores de Flash en http://www.adobe.com/devnet/air/flash/.
Para obtener información sobre la resolución de problemas para su producto y sobre las opciones de asistencia técnica gratuitas y pagadas, visite el sitio Web del servicio de asistencia técnica de Adobe en
http://www.adobe.com/es/support/. Siga el vínculo bajo Formación para tener acceso a los libros de Adobe Press, una
variedad de recursos de formación, programas de certificación en software de Adobe, y mucho más.

Capítulo 5: Creación de su primera aplicación de AIR en Flash CS3 o CS4

A continuación se resume la demostración del funcionamiento de Adobe® AIR™. Siga las instrucciones de este tema para crear y empaquetar una sencilla aplicación “Hello World” de AIR con Adobe® Flash® CS3 Professional.
Si aún no lo ha hecho, descargue e instale la actualización de Adobe AIR para Flash CS3. Para obtener más información sobre la instalación de Adobe AIR para Flash CS3, consulte “Configuración de Flash CS3 para Adobe AIR” en la página 4.
Si utiliza Adobe® Flash® CS4 Professional, la compatibilidad con Adobe AIR está integrada, por lo que no es necesario instalar ningún componente adicional para poder empezar.

Creación de la aplicación Hello World en Flash

Crear una aplicación de Adobe AIR en Flash es muy similar a crear cualquier otro archivo FLA. La diferencia es que se comienza creando un archivo de Flash (Adobe AIR) desde la pantalla de bienvenida y se finaliza creando la configuración de aplicación e instalador e instalando la aplicación de AIR. El siguiente procedimiento le guiará en el proceso de creación de una sencilla aplicación Hello World con Flash CS4 o Flash CS4.
11
Para crear la aplicación Hello World
1 Inicie Flash.
2 En la pantalla de bienvenida, haga clic en Archivo de Flash (Adobe AIR) para crear un archivo FLA vacío con
configuración de publicación de Adobe AIR.
3 Haga clic en Aceptar para responder al diálogo de resumen de edición de Adobe AIR con Flash CS3. Este diálogo
tarda unos segundos en aparecer la primera vez. (Este diálogo no aparece en Flash CS4.)
4 Seleccione la herramienta Texto en el panel Herramientas y cree un campo de texto estático (valor predeterminado)
en el centro del escenario. Dele una anchura suficiente para que pueda contener entre 15 y 20 caracteres.
5 Escriba el texto “Hello World” en el campo de texto.
6 Guarde el archivo y asígnele un nombre (por ejemplo, helloAIR).

Prueba de la aplicación

1 Pulse Ctrl + Intro o seleccione Control -> Probar película para probar la aplicación en Adobe AIR.
2 Para utilizar la función Depurar película, añada primero código ActionScript a la aplicación. Puede intentarlo
rápidamente añadiendo una sentencia trace como ésta:
trace("Running AIR application using Debug Movie");
3 Pulse Ctrl + Mayús + Intro o seleccione Control -> Depurar película para ejecutar la aplicación con Depurar
película.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Creación de su primera aplicación de AIR en Flash CS3 o CS4
4 Seleccione Comandos > AIR - Configuración de aplicación e instalador para abrir el cuadro de diálogo
correspondiente. En Flash CS4, puede abrir este diálogo seleccionando Archivo > Configuración de AIR.
12
5 Firme el paquete de Adobe AIR con el certificado digital con firma automática:
a Haga clic en el botón Definir… en el mensaje de la firma digital para abrir el cuadro de diálogo Firma digital.
b Haga clic en el botón Crear... para abrir el cuadro de diálogo Crear certificado digital con firma automática.
c Rellene los campos Nombre del editor, Unidad de organización, Nombre de organización, Correo electrónico,
País, Contraseña y Confirmar contraseña.
d Especifique el tipo de certificado. La opción Tipo de certificado hace referencia al nivel de seguridad: 1024-RSA
utiliza una clave de 1.024 bits (menos segunda) y 2048-RSA utiliza una clave de 2048 bits (más segura).
e Guarde la información en un archivo de certificado en la opción Guardar como o haciendo clic en el botón
Examinar... para acceder a la ubicación de la carpeta. (Por ejemplo, C:/Temp/mycert.pfx). Cuando haya terminado, haga clic en Aceptar.
f Flash regresa al cuadro de diálogo Firma digital. La ruta y el nombre de archivo del certificado con firma
automática creado aparece ahora en el cuadro de texto Certificado. Si no es así, introduzca la ruta y el nombre de archivo o haga clic en el botón Examinar para encontrarlo y seleccionarlo.
g Escriba la misma contraseña en el campo de texto Contraseña del cuadro de diálogo Firma digital que la
contraseña que asignó en el paso C y haga clic en Aceptar. Para obtener más información sobre la firma de aplicaciones de Adobe AIR, consulte “Firma de la aplicación” en la página 22.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Creación de su primera aplicación de AIR en Flash CS3 o CS4
6 Para crear el archivo aplicación y el instalador, haga clic en el botón Publicar archivo de AIR. Debe ejecutar los
comandos Probar película o Depurar película para crear los archivos SWF y application.xml antes de crear el archivo de AIR.
7 Para instalar la aplicación, haga doble clic en el archivo de AIR (application.air) en la misma carpeta en la que
guardó la aplicación.
8 Haga clic en el botón Instalar del cuadro de diálogo Instalación de la aplicación.
9 Revise los parámetros de Preferencias de instalación y Ubicación y asegúrese de que la casilla de verificación ‘Iniciar
aplicación tras la instalación’ está seleccionada. A continuación, haga clic en Continuar.
10 Haga clic en Finalizar cuando aparezca el mensaje Instalación completada.
La aplicación Hello World se asemeja a la de la ilustración:
13

Conversión de un archivo FLA en una aplicación de Adobe AIR

También es posible convertir un archivo FLA existente en una aplicación de AIR. Para obtener más información, consulte “Configuración de publicación de Adobe AIR” en la página 14. Si utiliza Flash CS4, consulte Publicación para
Adobe AIR en Utilización de Flash.

Capítulo 6: Actualización de Adobe AIR para Flash CS3 Professional

La actualización de Adobe® AIR™ para Adobe® Flash® CS3 Professional aumenta el entorno de edición para que pueda crear, depurar y empaquetar aplicaciones de Adobe AIR con Flash. El proceso de creación de una aplicación de Adobe AIR consiste en crear un archivo FLA de Adobe AIR, establecer la configuración de publicación adecuada, desarrollar la aplicación y crear los archivos de aplicación y de instalación que permitan implementarla.
Si utiliza Adobe® Flash® CS4 Professional, consulte Publicación para Adobe AIR en Utilización de Flash para obtener más información sobre la creación de aplicaciones de AIR.
Para obtener más información sobre las API de ActionScript ®3.0 de Adobe AIR que se pueden utilizar en su aplicación, consulte Referencia del lenguaje y componentes ActionScript 3.0.
Si quiere obtener una lista con las API de ActionScript de Adobe AIR, consulte “Funcionalidad específica de Adobe
AIR” en la página 55.
Nota: para utilizar clases del paquete air.net, arrastre primero el componente ServiceMonitorShim del panel Componentes al panel Biblioteca y, después, añada la siguiente sentencia
import al código ActionScript 3.0:
14
import air.net.*;

Creación de un archivo de Adobe AIR

Puede crear documentos de archivo de Flash (Adobe AIR) desde la pantalla de bienvenida de Flash, o bien crear un archivo de Flash (ActionScript™ 3.0) y convertirlo a archivo de Adobe AIR desde el cuadro de diálogo Configuración de publicación. No es posible crear un archivo de Adobe AIR desde el cuadro de diálogo Nuevo documento (Archivo > Nuevo). Para obtener más información sobre la conversión de un archivo FLA en Adobe AIR, consulte “Configuración de publicación de Adobe AIR” en la página 14.
1 Inicie Flash o, si ya lo ha iniciado, cierre todos los documentos abiertos para volver a la pantalla de bienvenida.
Nota: si ha desactivado la aparición de la pantalla de bienvenida de Flash, puede volver a visualizarla si selecciona Edición > Preferencias y, después, Pantalla de bienvenida en el menú Al iniciar, en la categoría General.
2 En la pantalla de bienvenida, haga clic en Archivo de Flash (Adobe AIR).
Aparecerá un mensaje de alerta para indicar cómo acceder a la configuración de la aplicación de Adobe AIR y cómo acceder a la documentación de la Ayuda. Si no desea que aparezca este mensaje en futuras ocasiones, seleccione No volver a mostrar. Debe tener en cuenta que no será posible volver a activar la aparición de este cuadro.

Configuración de publicación de Adobe AIR

Utilice la configuración de publicación de Flash para examinar o modificar la configuración de un archivo de AIR o para convertir un archivo de Flash (ActionScript 3.0) en un archivo de Flash (Adobe AIR).
Visualización de la configuración de publicación de Adobe AIR
1 Desde la pantalla de bienvenida de Flash, abra un documento Archivo de Flash (Adobe AIR).
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
2 Seleccione Archivo > Configuración de publicación y haga clic en la ficha Flash para ver la configuración de
publicación de Adobe AIR.
Adobe AIR 1.0 está seleccionado automáticamente en el menú Versión cuando se abre un documento de Adobe AIR. La versión de ActionScript™ se establece automáticamente en ActionScript 3.0. La configuración local de seguridad de reproducción se obvia, ya que es irrelevante para un archivo SWF de AIR.
Si ha abierto un archivo FLA de Flash, puede convertirlo en archivo de AIR de Flash modificando su configuración de publicación.
Conversión de un archivo FLA de Flash en un archivo de AIR de Flash mediante el cuadro de diálogo Configuración de publicación
1 Realice uno de los siguientes pasos:
Abra un archivo FLA existente.
Utilice la pantalla de bienvenida o seleccione Archivo > Nuevo para crear un nuevo archivo FLA.
2 Seleccione Archivo > Configuración de publicación.
3 En la ficha Flash, seleccione Adobe AIR 1.0 en el menú Versión.
La opción de versión de ActionScript está desactivada porque ActionScript 3.0 es la única opción válida para un archivo de AIR.
15
El resto de opciones predeterminadas son las mismas para un archivo FLA o uno de Adobe AIR.
4 Haga clic en el botón Publicar y luego en Aceptar para cerrar el cuadro de diálogo Configuración de publicación.
Si está seleccionada la herramienta Selección, el inspector de propiedades ahora indica que el destino del reproductor es Adobe AIR 1.
Nota: si elige el perfil Adobe AIR 1.0, Flash añade automáticamente la ubicación del archivo AIR playerglobal.swc a la variable de entorno Classpath. El archivo AIR playerglobal.swc permite utilizar las API de AIR de ActionScript. Sin embargo, si cambia de Adobe AIR 1 a Adobe® Flash® Player 9, Flash no vuelve automáticamente al perfil predeterminado ni modifica la configuración de Classpath para que utilice el archivo playerglobal.swc para Flash Player 9. Si cambia la configuración de publicación de Adobe AIR 1 a Flash Player 9, debe cambiar también el perfil de publicación a Predeterminado.
Para obtener información adicional sobre el cuadro de diálogo Configuración de publicación, consulte el manual Utilización de Flash en www.adobe.com/go/learn_fl_using_es.
Conversión de un archivo FLA de Flash en una aplicación AIR de Flash mediante el menú Comandos
1 Abra el archivo FLA de Flash.
2 Si va a abrir un archivo de Flash (ActionScript 3.0) nuevo, guárdelo. De no hacerlo, recibirá una advertencia cuando
intente acceder al siguiente paso.
3 Seleccione Comandos > AIR - Configuración de aplicación e instalador.
Aparecerá mensaje de alerta que pregunta si desea convertir el archivo a la configuración de publicación de Adobe AIR.
4 Haga clic en Aceptar para convertir el archivo FLA en una configuración de publicación de Adobe AIR. Aparecerá
el cuadro de diálogo AIR - Configuración de aplicación e instalador.
Para obtener información sobre el cuadro de diálogo AIR - Configuración de aplicación e instalador, consulte “Creación de archivos de aplicación e instalador de AIR” en la página 16.
Puede utilizar los comandos Probar película, Depurar película y Crear archivo de AIR en el archivo FLA de AIR convertido.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional

Vista previa de una aplicación de Adobe AIR

Puede obtener la vista previa de un archivo SWF de Adobe AIR como lo haría en la ventana de la aplicación de AIR. Consultar una vista previa resulta útil si se quieren ver los aspectos visibles de la aplicación sin tener que empaquetarla ni instalarla.
1 Es importante comprobar que se ha definido la configuración de publicación para una aplicación de Adobe AIR.
Para obtener más información, consulte “Configuración de publicación de Adobe AIR” en la página 14.
2 Seleccione Control > Probar película o pulse Control+Intro.
Si no ha definido la configuración de la aplicación desde el cuadro de diálogo AIR - Configuración de aplicación e instalador, Flash genera un archivo descriptor predeterminado de la aplicación (swfname-app.xml) en la misma carpeta en la que se escribe el archivo SWF. Si ha definido la configuración de la aplicación desde el cuadro de diálogo AIR - Configuración de aplicación e instalador, el archivo descriptor de la aplicación reflejará dicha configuración.

Depuración de una aplicación de Adobe AIR

El archivo SWF de Adobe AIR se puede depurar como del mismo modo que un archivo SWF de ActionScript 3.0 de Flash Player 9 (con la excepción de la depuración remota).
16
1 Asegúrese de haber definido la configuración de publicación de Adobe AIR.
2 Añada código ActionScript al panel Acciones (Ventana > Acciones). Para realizar pruebas, basta con añadir una
sentencia
trace("My application is running");
3 Seleccione Depurar > Depurar película o pulse la combinación de teclas Control+Mayús+Intro.
Flash inicia el depurador de ActionScript y exporta el archivo SWF con la información de depuración.
Si no ha definido la configuración de la aplicación desde el cuadro de diálogo AIR - configuración de aplicación e instalador, Flash genera un archivo descriptor predeterminado de la aplicación (swfname-app.xml) en la misma carpeta en la que se escribe el archivo SWF. Si ha definido la configuración de la aplicación desde el cuadro de diálogo AIR - Configuración de aplicación e instalador, el archivo descriptor de la aplicación reflejará dicha configuración.
Cuando selecciona Depurar > Depurar película p pulsa la combinación de teclas Control+Mayús+Intro para depurar la aplicación, Flash muestra una alerta si ésta no contiene ningún código ActionScript.
trace() como la siguiente en el panel Acciones (en el primer fotograma de la línea de tiempo):

Creación de archivos de aplicación e instalador de AIR

Una vez finalizada la aplicación, puede crear los archivos de aplicación e instalador de AIR para implementarla. Adobe AIR añade dos nuevas opciones de menú al menú Comandos de Flash: AIR - Configuración de aplicación e instalador y AIR - Crear archivo de AIR. Una vez creada la configuración de aplicación e instalador de AIR, puede utilizar la opción AIR - Crear archivo de AIR para crear de nuevo el archivo de AIR (.air), pero con la configuración existente.
Creación de archivos de aplicación e instalador de Adobe
1 En Flash, abra la página o el grupo de páginas que forman la aplicación de Adobe AIR.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
2 Guarde el archivo FLA de Adobe AIR antes de abrir el cuadro de diálogo AIR - Configuración de aplicación e
instalador.
3 Seleccione Comandos > AIR - Configuración de aplicación e instalador.
4 Rellene el cuadro de diálogo AIR - Configuración de aplicación e instalador y haga clic en Publicar archivo de AIR.
Al hacer clic en el botón Publicar archivo de AIR, se empaquetan los siguientes archivos: el archivo FLA, el archivo SWF, el archivo descriptor de la aplicación, los archivos de iconos de la aplicación y los archivos presentes en el cuadro de texto Archivos incluidos. Si aún no ha creado un certificado digital, Flash muestra el cuadro de diálogo Firma digital al hacer clic en el botón Publicar archivo de AIR.
El cuadro de diálogo AIR - Configuración de aplicación e instalador está dividido en dos secciones: Configuración de la aplicación y Configuración del instalador. Para obtener más información sobre estas configuraciones, consulte las siguientes secciones.

Configuración de la aplicación

La sección Configuración de la aplicación del cuadro de diálogo AIR - Configuración de aplicación e instalador tiene las siguientes opciones:
Nombre de archivo Nombre del archivo principal de la aplicación. Utiliza el nombre del archivo SWF como nombre
predeterminado.
17
Nombre Nombre utilizado por el instalador para generar el nombre de archivo y la carpeta de la aplicación. El nombre
sólo puede contener caracteres válidos admitidos en nombres de archivo y de carpeta. Utiliza el nombre del archivo SWF como nombre predeterminado.
Versión Opcional. Especifica el número de versión de la aplicación. De forma predeterminada, está vacío.
ID Identifica la aplicación con un ID exclusivo. Si lo desea, puede cambiar el ID predeterminado. No utilice espacios
ni caracteres especiales en el ID. Sólo se admiten como caracteres válidos: 0-9, a-z, A-Z, . (punto) y - (guión), de 1 a 212 caracteres de longitud. Su valor predeterminado es
Descripción Opcional. Permite introducir una descripción de la aplicación para mostrarla mientras el usuario la
com.adobe.example.nombre_aplicación.
instala. De forma predeterminada, está vacío.
Copyright Opcional. Permite introducir un aviso de copyright para mostrarlo mientras el usuario instala la aplicación.
Estilo de ventana Especifica el estilo de ventana (o del fondo cromático) que se utiliza en la interfaz de usuario cuando
éste ejecuta la aplicación en su ordenador. Puede especificar la opción Fondo cromático del sistema. Hace referencia al estilo visual utilizado por el sistema operativo. También puede elegir Fondo cromático personalizado (opaco) o Fondo cromático personalizado (transparente). Para no mostrar el fondo cromático del sistema de la aplicación, seleccione Ninguno. El fondo cromático del sistema está presente en la aplicación junto con los controles de ventanas estándar del sistema operativo. El fondo cromático personalizado (opaco) elimina los controles estándar del sistema y permite crear controles propios para la aplicación. (El fondo cromático personalizado se crea directamente en el archivo FLA.) El fondo cromático personalizado (transparente) es como el personalizado (opaco), pero añade funcionalidad de transparencia en los bordes de la página. Esta funcionalidad permite que las ventanas de la aplicación no tengan forma cuadrada o rectangular.
Icono Opcional. Permite especificar el icono de la aplicación. El icono aparece tras instalar la aplicación y ejecutarla
en Adobe AIR. Puede elegir entre cuatro tamaños de icono distintos (128, 48, 32 y 16 píxeles) para que se visualice correctamente en las cuatro vistas en las que aparece. Por ejemplo, el icono puede aparecer en el explorador de archivos como miniatura, detalle o título. También puede aparecer como icono de escritorio y en el título de una ventana de aplicación de AIR o en otros lugares.
La imagen predeterminada del icono es el icono de muestra de aplicación de AIR si no se especifica ninguna otra.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
Para especificar un icono, haga clic en el botón Seleccionar imágenes de icono en el cuadro de diálogo AIR ­Configuración de aplicación e instalador. En el cuadro de diálogo Imágenes de icono, haga clic en la carpeta de cada tamaño de icono y seleccione el archivo que quiera utilizar. Los archivos deben estar en formato PNG (Portable Network Graphics).
En la siguiente ilustración se muestra el cuadro de diálogo Imágenes de icono con los iconos de la aplicación predeterminados de Adobe AIR.
18
Especificación de distintos tamaños de imagen de icono de la aplicación
Si especifica una imagen, debe tener el tamaño exacto (128x128, 48x48, 32x32 o 16x16). Si no proporciona una imagen con tamaño de icono concreto, Adobe AIR la ajusta a una de las imágenes proporcionadas y crea la imagen.
Configuración avanzada
El botón Configuración del cuadro de diálogo AIR - Configuración de aplicación e instalador permite especificar la configuración avanzada del archivo descriptor de la aplicación. Al hacer clic en el botón Configuración, aparece el cuadro de diálogo Configuración avanzada.
En el cuadro de diálogo Configuración avanzada se puede especificar cualquier tipo de archivo asociado que deba manejar la aplicación. Por ejemplo, si quiere que la aplicación sea la aplicación principal para gestionar archivos HTML, debe especificarlo en el cuadro de texto Tipos de archivo asociados.
También puede especificar la configuración de los siguientes aspectos de la aplicación:
El tamaño y la posición de la ventana inicial
La carpeta de instalación de la aplicación
La carpeta del menú Programa en la que se coloca la aplicación.
El cuadro de diálogo tiene las opciones siguientes:
Tipos de archivo asociados Le permite especificar tipos de archivos asociados que la aplicación de AIR vaya a
gestionar. Haga clic en el botón Más (+) para añadir un nuevo tipo de archivo en el cuadro de texto. Al hacer clic en el
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
botón Más, aparece el cuadro de diálogo Configuración de tipo de archivo. Si hace clic en el botón Menos (-), eliminará el elemento seleccionado en el cuadro de texto. Si hace clic en el botón Lápiz, se abre el cuadro de diálogo Configuración de tipo de archivo para que pueda editar el elemento seleccionado en el cuadro de texto. De forma predeterminada, los botones Menos (-) y Lápiz aparecen desactivados. Al seleccionar un elemento en el cuadro de texto, se activan los botones Menos (-) y Lápiz para poder eliminar o editar el elemento. El valor predeterminado del cuadro de texto en Ninguno.
Para obtener más información sobre la configuración de tipos de archivo asociados, consulte “Configuración de tipo
de archivo” en la página 19.
Configuración de la ventana inicial Permite especifica la configuración de tamaño y de posición de la ventana inicial
de la aplicación.
Anchura: especifica la anchura inicial de la ventana, en píxeles. De forma predeterminada, el campo está vacío.
Altura: especifica la altura inicial de la ventana, en píxeles. De forma predeterminada, el campo está vacío.
X: especifica la posición horizontal inicial de la ventana, en píxeles. De forma predeterminada, el campo está vacío.
Y: especifica la posición vertical inicial de la ventana, en píxeles. De forma predeterminada, el campo está vacío.
Anchura máxima y Altura máxima: especifican el tamaño máximo de la ventana, en píxeles. De forma
predeterminada, estos campos están vacíos.
Anchura mínima y Altura mínima: especifican el tamaño mínimo de la ventana, en píxeles. De forma
predeterminada, estos campos están vacíos.
Se puede maximizar: permite especificar si el usuario puede maximizar o no la ventana. De forma predeterminada,
esta opción está seleccionada (o es true).
Se puede minimizar: permite especificar si el usuario puede minimizar o no la ventana. De forma predeterminada,
esta opción está seleccionada (o es true).
Redimensionable: permite especificar si el usuario puede cambiar el tamaño de la ventana. Si esta opción no se
selecciona, los campos Anchura máxima, Altura máxima, Anchura mínima y Altura mínima aparecen desactivados. De forma predeterminada, esta opción está seleccionada (o es true).
Visible: permite especificar si la ventana de la aplicación está visible inicialmente. De forma predeterminada, la
opción está seleccionada (o es true).
Otras opciones Permite especificar la siguiente información adicional relacionada con la instalación:
19
Carpeta de instalación: especifica la carpeta en la que se instala la aplicación.
Carpeta del menú Programa: especifica el nombre de la carpeta del menú Programa de la aplicación.
Usar UI personalizada para actualizaciones: especifica qué ocurre cuando un usuario abre un archivo de AIR para
una aplicación ya instalada. De forma predeterminada, AIR abre un cuadro de diálogo donde el usuario puede actualizar la versión instalada con la versión del archivo de AIR. Si no quiere que el usuario pueda tomar esta decisión y desea tener control total sobre la aplicación y sus actualizaciones, seleccione esta opción. Al seleccionar esta opción, se anula el comportamiento predeterminado y se permite que la aplicación controle sus propias actualizaciones.
Para obtener más información sobre la actualización de una aplicación de AIR mediante programación, consulte “Actualización de aplicaciones de AIR” en la página 331.
Configuración de tipo de archivo
Flash muestra el cuadro de diálogo Configuración de tipo de archivo al hacer clic en el botón Más (+) o en el botón Lápiz en el cuadro de diálogo Configuración avanzada, o bien al añadir o editar tipos de archivo asociados para la aplicación.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
Los dos únicos campos necesarios de este cuadro de diálogo son Nombre y Extensión. Si hace clic en Aceptar sin haber rellenado estos campos, Flash mostrará un cuadro de diálogo de error.
Puede especificar las opciones siguientes para un tipo de archivo asociado:
Nombre El nombre del tipo de archivo (por ejemplo, Lenguaje de marcado de hipertexto, Archivo de texto o
Ejemplo).
Extensión La extensión del nombre de archivo (por ejemplo, html, txt o xmpl); puede contener hasta 39 caracteres
alfanuméricos básicos, (A-Za-z0-9) sin punto inicial.
Descripción Opcional. Una descripción del tipo de archivo (por ejemplo, Archivo de vídeo de Adobe).
Tipo de contenido Opcional. Especifica el tipo MIME para el archivo.
Configuración de icono de tipo de archivo Opcional. Permite especificar un icono asociado al tipo de archivo. Puede
elegir entre cuatro tamaños de icono distintos (128x128, 48x48, 32x32 y 16x16 píxeles) para que se visualice correctamente en las cuatro vistas en las que aparece. Por ejemplo, el icono puede aparecer en el explorador de archivos como miniatura, detalle o título.
Si quiere especificar una imagen, ésta debe tener el tamaño indicado. Si no especifica ningún archivo para un tamaño concreto, AIR utiliza la imagen con tamaño más parecido y la escala para que se ajuste al caso concreto.
Para especificar un icono, puede hacer clic en la carpeta del tamaño de icono y seleccionar un archivo de icono, o bien facilitar la ruta de acceso y el nombre de archivo del archivo de icono en el cuadro de texto que aparece junto al mensaje. El archivo de icono debe estar en formato PNG.
20
Una vez creado el nuevo tipo de archivo, aparece en el cuadro de lista Tipo de archivo del cuadro de diálogo Configuración avanzada.
Configuración del archivo descriptor de aplicación
La configuración definida para la aplicación se guarda en el archivo nombre_aplicación-app.xml. Sin embargo, si lo desea, puede indicar a Flash que utilice un archivo descriptor de aplicación personalizado.
Usar archivo descriptor de aplicación personalizado Permite buscar un archivo descriptor de aplicación
personalizado. Si selecciona la opción Usar archivo descriptor de aplicación personalizado, la sección Configuración de aplicación del cuadro de diálogo se desactiva. Para especificar la ubicación del archivo descriptor de aplicación personalizado, puede introducirla en el campo de texto situado debajo de Usar archivo descriptor de aplicación personalizado, o bien hacer clic en el icono de la carpeta y acceder a la ubicación. Para obtener más información sobre el archivo descriptor de aplicación, consulte “Creación de un archivo descriptor de aplicación personalizado” en la página 21.

Configuración del instalador

La segunda sección del cuadro de diálogo AIR - Configuración de aplicación e instalador contiene parámetros relacionados con la instalación de la aplicación.
Firma digital Todas las aplicaciones de Adobe AIR deben estar firmadas para poder instalarse en otro sistema. Para
obtener más información sobre la asignación de una firma digital a una aplicación Flash de Adobe AIR, consulte “Firma de la aplicación” en la página 22.
Destino Especifica la ubicación en la que se guarda el archivo de AIR. La ubicación predeterminada es el directorio
en el que se guardó el archivo FLA. Haga clic en el icono de la carpeta para seleccionar una ubicación diferente. El nombre del paquete predeterminado es el nombre de la aplicación con la extensión de nombre de archivo .air.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
Archivos/Carpetas incluidos Especifica qué archivos y carpetas adicionales se incluyen en la aplicación. Haga clic en el
botón Más (+) para añadir archivos y en el botón de la carpeta para añadir carpetas. Para eliminar un archivo o una carpeta de la lista, seleccione el elemento correspondiente y haga clic en el botón Menos (-).
De forma predeterminada, el archivo descriptor de aplicación y el archivo SWF principal se añaden automáticamente a la lista del paquete. La lista del paquete muestra estos archivos aunque no se haya publicado aún el archivo FLA de Adobe AIR. La lista del paquete muestra los archivos y las carpetas con una estructura simple. No se muestran los archivos de cada carpeta; los nombres completos de las rutas sí se muestran, aunque pueden aparecer cortados.
La lista no incluye los archivos de icono. Cuando Flash empaqueta los archivos, copia los archivos de icono en una carpeta temporal relacionada con la ubicación del archivo SWF. Flash elimina la carpeta una vez finalizado el paquete.

¿No consigue crear los archivos de la aplicación y del instalador?

Los archivos de la aplicación y del instalador no se pueden crear en los casos siguientes:
La cadena del identificador de la aplicación no tiene una longitud correcta o contiene caracteres no válidos. La
cadena del identificador de la aplicación puede tener entre 1 y 212 caracteres dentro del rango 0-9, a-z, A-Z, . (punto), - (guión).
No existen los archivos de la lista del instalador.
Los tamaños de los archivos de icono personalizados son incorrectos.
La carpeta de destino de AIR no tiene acceso de escritura.
No ha firmado la aplicación o no ha especificado que se trata de una aplicación de Adobe AIR que se firmará más
adelante.
21

Creación de un archivo descriptor de aplicación personalizado

El archivo descriptor de aplicación es un archivo XML que se puede editar con un simple editor de texto. Para crear un archivo descriptor de aplicación predeterminado, edite los valores para especificar los que desee. A continuación se muestran los valores predeterminados:
id = com.adobe.example.nombreswf
fileName = nombreswf
name = nombreswf
version = 1.0
description = vacío
copyright = vacío
initialWindow
title = name
content = nombreswf.swf
systemChrome = standard, type = normal
transparent = false
visible = true
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
icon
image128x128 = icons/AIRApp_128.png
image48x48 = icons/AIRApp_48.png
image32x32 = icons/AIRApp_32.png
image16x16 = icons/AIRApp_16.png
customUpdateUI = false
allowBrowserInvocation = false
Para obtener más información sobre el archivo descriptor de aplicación, consulte “Configuración de las
propiedades de una aplicación de AIR” en la página 45.

Firma de la aplicación

Todas las aplicaciones de Adobe AIR deben estar firmadas para poder instalarse en otro sistema. Sin embargo, Flash permite crear archivos instaladores de Adobe AIR sin firmar para que la aplicación se pueda firmar más adelante. Estos archivos de instalador sin firmar de Adobe AIR reciben el nombre de paquete AIRI. Esta funcionalidad permite manejar situaciones en las que el certificado se encuentra en otro ordenador o en las que la firma se gestiona independientemente del desarrollo de la aplicación.
22
Firma de una aplicación de Adobe AIR con un certificado de firma precomprado en una autoridad emisora de certificados raíz
1 Haga clic en el botón Definir de Firma digital en el cuadro de diálogo AIR - Configuración de aplicación e
instalador. Se abre el cuadro de diálogo Firma digital.
Este cuadro de diálogo tiene dos botones de opción que permiten firmar la aplicación de Adobe AIR con un certificado digital o preparar un paquete AIRI. Si decide firmar la aplicación de AIR, puede utilizar para ello un certificado digital emitido por una entidad emisora de certificados raíz o crear un certificado con firma automática. Un certificado con firma automática es fácil de crear, pero no es tan fiable como uno emitido por una entidad de certificados raíz.
Cuadro de diálogo Firma digital. Permite firmar una aplicación de AIR
2 Seleccione un archivo de certificado en el menú o haga clic en el botón Examinar para buscar uno.
3 Seleccione el certificado.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Actualización de Adobe AIR para Flash CS3 Professional
4 Escriba la contraseña.
5 Haga clic en Aceptar.
Para obtener más información sobre el proceso de firma de la aplicación de AIR, consulte “Firma digital de archivos
de AIR” en la página 324.
Creación de un certificado digital con firma automática
1 Haga clic en el botón Crear. Se abrirá el cuadro de diálogo Crear certificado digital con firma automática.
2 Rellene los campos Nombre del editor, Unidad de organización, Nombre de organización, País, Contraseña y
Confirmar contraseña.
3 Especifique el tipo de certificado.
La opción Tipo hace referencia al nivel de seguridad del certificado: 1024-RSA utiliza una clave de 1.024 bits (menos segura), mientras que 2048-RSA utiliza una clave de 2.048 bits (más segura).
4 Guarde la información en un archivo de certificado en la opción Guardar como o haciendo clic en el botón
Examinar para acceder a la ubicación de la carpeta.
5 Haga clic en Aceptar.
6 En el cuadro de diálogo Firma digital, escriba la contraseña asignada en el segundo paso de este procedimiento y
haga clic en Aceptar.
23
Una vez definido el certificado digital, el botón Definir pasa a ser Cambiar.
Para que Flash recuerde la contraseña utilizada en esta sesión, haga clic en Recordar contraseña para esta sesión.
Si la opción Marca de fecha no está seleccionada al hacer clic en Aceptar, aparece un cuadro de diálogo para advertir que la aplicación no se instalará correctamente si el certificado digital vence. Si hace clic en Sí en la advertencia, la marca de fecha se desactivará. Si hace clic en No, la opción Marca de fecha se selecciona automáticamente y se activa.
Para obtener más información sobre la creación de un certificado digital con firma automática, consulte “Firma digital
de archivos de AIR” en la página 324.
También es posible crear una aplicación intermedia de AIR (AIRI) sin firma digital. El usuario no podrá instalar la aplicación en su escritorio hasta que no haya añadido una firma digital.
Preparar un paquete AIRI para firmarlo más tarde
En el cuadro de diálogo Firma digital, seleccione Preparar un archivo de AIR Intermediate (AIRI) que se firmará
más tarde y haga clic en Aceptar.
El estado de la firma digital cambia para indicar que ha escogido preparar un paquete AIRI para firmarlo más tarde y el botón Definir pasa a Cambiar.

Capítulo 7: Seguridad en AIR

En este capítulo se describen los temas de seguridad que se deben tener en cuenta cuando se desarrolla una aplicación de AIR.

Aspectos básicos de la seguridad de AIR

Las aplicaciones de AIR se ejecutan con los mismos privilegios de usuario que las aplicaciones nativas. En general, estos privilegios permiten un amplio acceso a las prestaciones del sistema operativo como leer y escribir archivos, iniciar aplicaciones, dibujar en la pantalla y la comunicación con la red. Las restricciones del sistema operativo que se aplican a las aplicaciones nativas, como privilegios específicos del usuario, se aplican de igual manera a las aplicaciones de AIR.
Aunque el modelo de seguridad de Adobe® AIR™ es una evolución del modelo de seguridad de Adobe® Flash® Player, el contrato de seguridad es diferente del contrato de seguridad que se aplica al contenido en un navegador. Este contrato ofrece a los desarrolladores un medio seguro de funcionalidad más amplia para experiencias enriquecedoras con libertades que serían inapropiadas para una aplicación basada en un navegador.
24
Las aplicaciones de AIR están escritas usando ya sea código de bytes compilado (contenido SWF) o script interpretado (JavaScript, HTML) para que el motor de ejecución proporcione la administración de la memoria. Esto reduce las posibilidades de que las aplicaciones de AIR se vean afectadas por las vulnerabilidades relacionadas con la administración de la memoria, como desbordes de búfer y corrupción de memoria. Éstas son algunas de las vulnerabilidades más comunes que afectan a las aplicaciones de escritorio escritas en código nativo.

Instalación y actualizaciones

Las aplicaciones de AIR se distribuyen a través de los archivos de instalación de AIR que usan la extensión air. Cuando se instala Adobe AIR y se abre un archivo de instalación de AIR, el motor de ejecución administra el proceso de instalación.
Nota: los desarrolladores pueden especificar una versión y un nombre de aplicación y un origen de editor, pero no se puede modificar el flujo de trabajo de instalación de la aplicación inicial. Esta restricción es una ventaja para los usuarios porque todas las aplicaciones de AIR comparten un procedimiento de instalación seguro, optimizado y coherente administrado por el motor de ejecución. Si es necesario personalizar la aplicación, se puede hacer cuando se ejecuta la aplicación por primera vez.

Ubicación de la instalación del motor de ejecución

Las aplicaciones de AIR primero requieren la instalación del motor de ejecución en el equipo del usuario, al igual que los archivos SWF primero requieren la instalación del plug-in de navegador de Flash Player.
El motor de ejecución se instala en la siguiente ubicación en el equipo del usuario:
Mac OS: /Library/Frameworks/
Windows: C:\Archivos de programa\Archivos comunes\Adobe AIR
Linux: /opt/Adobe AIR/
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
En Mac OS, para instalar una versión actualizada de una aplicación, el usuario debe contar con adecuados privilegios del sistema para instalar en el directorio de la aplicación. En Windows y Linux, el usuario debe disponer de privilegios de administrador.
El motor de ejecución se puede instalar de dos maneras: usando la función de instalación integrada (instalando directamente desde un navegador Web) o a través de una instalación manual. Para más información, consulte “Distribución, instalación y ejecución de aplicaciones de AIR” en la página 314.

Instalación integrada (motor de ejecución y aplicación)

La función de instalación integrada proporciona a los desarrolladores una experiencia de instalación optimizada para los usuarios que aún no tienen instalado Adobe AIR. En el método de instalación integrada, el desarrollador crea un archivo SWF que presenta la aplicación para instalar. Cuando un usuario hace clic en el archivo SWF para instalar la aplicación, el archivo SWF intenta detectar el motor de ejecución. Si el motor de ejecución no se puede detectar se instala, y el motor de ejecución se activa de forma inmediata con el proceso de instalación para la aplicación del desarrollador.

Instalación manual

Como alternativa, el usuario puede descargar e instalar manualmente el motor de ejecución antes de abrir un archivo de AIR. Entonces el desarrollador puede distribuir un archivo de AIR mediante diferentes medios (por ejemplo, a través de correo electrónico o un vínculo HTML en un sitio Web). Cuando se abre el archivo de AIR, el motor de ejecución comienza el proceso de instalación de la aplicación.
25
Para más información sobre este proceso, consulte “Distribución, instalación y ejecución de aplicaciones de AIR” en la página 314

Flujo de instalación de la aplicación

El modelo de seguridad de AIR permite que los usuarios decidan si quieren instalar una aplicación de AIR. La instalación de AIR proporciona varias mejoras con respecto a las tecnologías de instalación de las aplicaciones nativas que ayuda a los usuarios a la hora de tomar decisiones:
El motor de ejecución proporciona una experiencia de instalación coherente en todos los sistemas operativos, aun
cuando una aplicación de AIR se instala desde un vínculo en un navegador Web. La mayoría de las experiencias de instalación de las aplicaciones nativas dependen del navegador u otra aplicación para proporcionar información de seguridad, si la hay.
La instalación de la aplicación de AIR identifica el origen de la aplicación y la información sobre los privilegios
disponibles para la aplicación (si el usuario permite continuar la instalación).
El motor de ejecución administra el proceso de instalación de una aplicación de AIR. Una aplicación de AIR no
puede manipular el proceso de instalación que utiliza el motor de ejecución.
En general, los usuarios no deberían instalar ninguna aplicación de escritorio que proviene de un origen que no conocen o que no se puede verificar. La comprobación de veracidad sobre la seguridad de las aplicaciones nativas es igual para las aplicaciones de AIR así como para otras aplicaciones que se instalan.

Destino de la aplicación

El directorio de instalación se puede establecer usando una de las siguientes dos opciones:
1 El usuario personaliza el destino durante la instalación. La aplicación se instala donde lo especifica el usuario.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
2 Si el usuario no cambia el destino de la instalación, la aplicación se instala en la ruta predeterminada como lo
Seguridad en AIR
determina el motor de ejecución:
Mac OS: ~/Aplicaciones/
Windows XP y anterior: C:\Archivos de programa\
Windows Vista: ~/Aplicaciones/
Linux: /opt/
Si el desarrollador especifica un parámetro
installFolder en el archivo descriptor de la aplicación, la aplicación
se instala en una ruta secundaria de este directorio.

Sistema de archivos de AIR

El proceso de instalación para las aplicaciones de AIR copia todos los archivos que el desarrollador ha incluido en el archivo de instalación de AIR en el equipo local del usuario. La aplicación instalada se compone de:
Windows: un directorio que contiene todos los archivos incluidos en el archivo de instalación de AIR. Asimismo,
el motor de ejecución crea un archivo exe durante la instalación de la aplicación de AIR.
Linux: un directorio que contiene todos los archivos incluidos en el archivo de instalación de AIR. Asimismo, el
motor de ejecución crea un archivo bin durante la instalación de la aplicación de AIR.
Mac OS: un archivo app que contiene todo el contenido del archivo de instalación de AIR. Se puede examinar
usando la opción "Show Package Contents" en Finder. El motor de ejecución crea este archivo app como parte de la instalación de la aplicación de AIR.
26
Una aplicación de AIR se ejecuta del siguiente modo:
Windows: ejecutando el archivo .exe en la carpeta de instalación, o un método abreviado que corresponde a este
archivo (como un método abreviado en el menú Inicio o en el escritorio)
Linux: iniciando el archivo .bin en la carpeta de instalación, seleccionando la aplicación en el menú de aplicaciones
o realizando la ejecución a partir de un alias o acceso directo en el escritorio.
Mac OS: ejecutando el archivo .app o un alias que apunta al mismo.
Asimismo, el sistema de archivos de la aplicación incluye subdirectorios relacionados con la función de la aplicación. Por ejemplo, la información escrita en el almacenamiento local cifrado se guarda en un subdirectorio en un directorio nombrado a partir del identificador de la aplicación.

Almacenamiento de la aplicación de AIR

Las aplicaciones de AIR tienen privilegios para escribir en cualquier ubicación en el disco duro del usuario; sin embargo, se recomienda que los desarrolladores utilicen la ruta relacionado con su aplicación. Los archivos que se escriben a una ubicación estándar dependiendo del sistema operativo del usuario:
En Mac OS: el directorio de almacenamiento de una aplicación es <appData>/<appId>/Local Store/ donde
<appData> es la “carpeta de preferencias” del usuario, normalmente /Usuarios/<usuario>/Librería/Preferences
En Windows: el directorio de almacenamiento de una aplicación es <appData>\<appId>\Local Store\ , donde
<appData> es la “Carpeta especial” CSIDL_APPDATA del usuario, normalmente: C:\Documents and Settings\<user>\Application Data
En Linux: <appData>/<appID>/Local Store/, donde <appData> es /home/<user>/.appdata
app-storage:/ para el almacenamiento local
app-storage:/ desde una aplicación se encuentran en
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Puede acceder al directorio de almacenamiento de la aplicación a través de la propiedad
air.File.applicationStorageDirectory. Puede acceder al contenido usando el método resolvePath() de la
clase File. Para más información, consulte “Trabajo con el sistema de archivos” en la página 107.
Seguridad en AIR

Actualización de Adobe AIR

Cuando el usuario instala una aplicación de AIR que requiere una versión actualizada del motor de ejecución, el tiempo de ejecución automáticamente instala la actualización del motor de ejecución requerida.
Para actualizar el motor de ejecución, el usuario debe tener privilegios administrativos para el equipo.

Actualización de aplicaciones de AIR

El desarrollo y la implementación de actualizaciones de software es uno de los desafíos más grandes de seguridad que enfrentan las aplicaciones de código nativo. La API de AIR proporciona un mecanismo para mejorar esto: se puede invocar el método requiere una actualización, el archivo de AIR se descarga, se instala y la aplicación se reinicia. Los desarrolladores pueden usar esta clase no sólo para proporcionar nueva funcionalidad sino también para responder a las vulnerabilidades potenciales de seguridad.
Nota: los desarrolladores pueden especificar la versión de una aplicación configurando la propiedad version del archivo descriptor de la aplicación. AIR no interpreta la cadena de versión de ningún modo. Por consiguiente, la versión “3.0” no significa que sea más actual que la versión “2.0.” Depende del desarrollador mantener el significado de las versiones. Para más información, consulte “Definición de propiedades en el archivo descriptor de la aplicación” en la página 46.
Updater.update() durante el inicio para verificar la ubicación remota de un archivo de AIR. Si se
27

Desinstalación de una aplicación de AIR

Un usuario puede desinstalar una aplicación de AIR:
En Windows: usando el panel Agregar o quitar programas para quitar la aplicación.
En Mac OS: eliminando el archivo app de la ubicación de instalación.
Al quitar una aplicación de AIR se quitan todos los archivos en el directorio de la aplicación. Sin embargo, no se quitan los archivos que la aplicación haya escrito fuera del directorio de la aplicación. Cuando se quitan las aplicaciones de AIR no se deshacen los cambios que la aplicación de AIR ha realizado en los archivos fuera del directorio de la aplicación.

Desinstalación de Adobe AIR

Se puede desinstalar AIR de la siguiente manera:
En Windows: ejecutando Agregar o quitar programas del Panel de control, seleccionando Adobe AIR y “Quitar”.
En Mac OS: ejecutando la aplicación Uninstaller de Adobe AIR en el directorio de aplicaciones.

Parámetros del registro de Windows para administradores

En Windows, los administradores pueden configurar un equipo para impedir (o permitir) la instalación de una aplicación de AIR o actualizaciones del motor de ejecución. Estos parámetros están dentro del registro de Windows bajo la siguiente clave: HKLM\Software\Policies\Adobe\AIR. Incluyen lo siguiente:
Parámetro de registro Descripción
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
28
AppInstallDisabled Especifica que se permite la instalación y desinstalación de la aplicación de AIR. Configurada en 0 para
UntrustedAppInstallDisabled Especifica que se permite la instalación de aplicaciones de AIR que no es de confianza (aplicaciones que
UpdateDisabled Especifica que se permite la actualización del motor de ejecución, ya sea como una tarea en segundo
“autorizado”, y en 1 para “no autorizado”.
no incluyen un certificado de confianza; para más información consulte “Firma digital de archivos de
AIR” en la página 324). Configurada en 0 para “autorizado”, y en 1 para “no autorizado”.
plano o como parte de una instalación explícita. Configurada en 0 para “autorizado”, y en 1 para “no autorizado”.

Entornos limitados

AIR proporciona una arquitectura completa de seguridad que define autorizaciones según cada archivo en una aplicación de AIR, tanto interno como externo. Las autorizaciones se conceden a los archivos según el origen y se asignan en agrupaciones lógicas de seguridad llamados entornos limitados.

Entornos limitados de aplicación de AIR

El modelo de seguridad del motor de ejecución de los entornos limitados está compuesto por el modelo de seguridad de Flash Player con la adición del entorno limitado de aplicación. Los archivos que no se encuentran en el entorno limitado de la aplicación tienen restricciones de seguridad similares a aquellos especificados por el modelo de seguridad de Flash Player.
El motor de ejecución usa estos entornos limitados de seguridad para definir el rango de datos al que puede acceder el código y las operaciones que puede realizar. Para mantener la seguridad local, los archivos en cada entorno limitado se aíslan de los archivos de los otros entornos limitados. Por ejemplo, un archivo SWF cargado en una aplicación de AIR desde una URL de Internet externa se coloca en un entorno limitado remoto y, de forma predeterminada, no tiene permiso para escribir un script en los archivos que residen en el directorio de la aplicación, que se asignan al entorno limitado de la aplicación.
La siguiente tabla describe cada tipo de entorno limitado:
Entorno limitado Descripción
aplicación El archivo reside en el directorio de la aplicación y funciona con el conjunto completo de los privilegios
remoto El archivo procede de una URL de Internet y se rige por las reglas de un entorno limitado basado en
local de confianza El archivo es un archivo local y el usuario lo ha designado como de confianza, usando ya sea un archivo
local con acceso a la red El archivo es un archivo SWF local publicado con una designación de acceso a la red, pero el usuario no
local con sistema de archivos El archivo es un archivo local de script que no se publicó con una designación de acceso a la red y el
de AIR.
dominios equivalentes a las reglas que se aplican a los archivos remotos en Flash Player. (Hay entornos limitados remotos individuales para cada dominio de red, como http://www.example.com y https://foo.example.org.
de configuración de confianza de Flash Player o Settings Manager. El archivo puede leer en orígenes de datos locales y puede comunicarse con Internet, pero no tiene todos los privilegios de AIR.
ha confiado explícitamente en el mismo. El archivo se puede comunicar con Internet pero no puede leer en orígenes de datos locales. Este entorno limitado sólo está disponible para el contenido SWF.
usuario no ha confiado explícitamente en el mismo. Esto incluye a los archivos JavaScript que no son de confianza. El archivo puede leer en orígenes de datos locales pero no puede comunicarse con Internet.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
Este tema se centra principalmente en el entorno limitado de la aplicación y las relaciones con otros entornos limitados en la aplicación de AIR. Los desarrolladores que usan contenido asignado a otros entornos limitados deben consultar más documentación sobre el modelo de seguridad de Flash Player. Consulte el capítulo “Seguridad de Flash Player” en la documentación Programación con ActionScript 3.0 (http://www.adobe.com/go/flashcs4_prog_as3_security_es) y el
documento técnico sobre seguridad en Flash Player 9 (http://www.adobe.com/go/fp9_0_security_es) o el documento técnico sobre seguridad en Flash Player 10 (http://www.adobe.com/go/fp10_0_security_es) (en inglés).

Entorno limitado de la aplicación

Cuando es instala una aplicación, todos los archivos incluidos en un archivo de instalación de AIR se instalan en el equipo del usuario en un directorio de la aplicación. Los desarrolladores pueden hacer referencia a este directorio en código a través del esquema de URL en la página 309). Todos los archivos del árbol de directorios de la aplicación se asignan al entorno limitado de la aplicación cuando se ejecuta la aplicación. El contenido en el entorno limitado de la aplicación cuenta con todos los privilegios que tiene disponible una aplicación de AIR, incluyendo la interacción con el sistema de archivos local.
Muchas aplicaciones de AIR solo usan estos archivos instalados localmente para ejecutar la aplicación. Sin embargo, las aplicaciones de AIR no están restringidas a solo los archivos dentro the directorio de la aplicación; pueden cargar cualquier tipo de archivo de cualquier origen. Esto incluye archivos locales del equipo del usuario así como archivos de orígenes externos disponibles, como los de una red local o en Internet. El tipo de archivo no tiene ningún impacto en las restricciones de seguridad; los archivos HTML cargados tienen los mismos privilegios de seguridad que los archivos SWF cargados desde el mismo origen.
app:/ (consulte “Utilización de esquemas de URL de AIR en direcciones URL
29
El contenido en el entorno limitado de seguridad de la aplicación tiene acceso a las API de AIR pero los contenidos en otros entornos limitados no pueden utilizarlas. Por ejemplo, la propiedad
air.NativeApplication.nativeApplication.applicationDescriptor, que devuelve los contenidos del
archivo descriptor de la aplicación de la aplicación, está restringido al contenido en el entorno limitado de seguridad de la aplicación. Otro ejemplo de una API restringida es la clase FileStream, que contiene métodos para leer y escribir en el sistema de archivos local.
Las API ActionScript que sólo están disponibles para el contenido en el entorno limitado de seguridad de la aplicación se indican con el logo de AIR en la Referencia del lenguaje ActionScript 3.0 para Adobe AIR. El uso de estas API en otros entornos limitados hace que el motor de ejecución emita una excepción SecurityError.
Para el contenido HTML (en un objeto HTMLLoader) todas las API JavaScript de AIR (las que están disponibles mediante la propiedad
window.runtime o mediante el objeto air cuando se usa el archivo AIRAliases.js) están
disponibles para el contenido en el entorno limitado de seguridad de la aplicación. El contenido HTML en otro entorno limitado no tiene acceso a la propiedad
window.runtime, por lo que este contenido no puede acceder a las
API de AIR.
Restricciones de JavaScript y HTML
Para el contenido HTML en el entorno limitado de seguridad de la aplicación, hay limitaciones en el uso de API que pueden transformar dinámicamente cadenas en código ejecutable después de que se carga el código. Esta limitación es para evitar que la aplicación accidentalmente inserte (y ejecute) código desde orígenes que no pertenecen a la aplicación (como dominios de red potencialmente inseguros). Un ejemplo es el uso de la función información, consulte “Restricciones de código del contenido en entornos limitados diferentes” en la página 33
eval(). Para más
Restricciones en etiquetas img en el contenido del campo de texto ActionScript
Para evitar posibles ataques de suplantación de identidad (phishing), las etiquetas img en el contenido HTML en objetos TextField de ActionScript se omiten en el contenido SWF en el entorno limitado de seguridad de la aplicación.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
Restricciones en asfunction
El contenido en el entorno limitado de la aplicación no puede usar el protocolo asfunction en el contenido HTML en los campos de texto de ActionScript 2.0.
Acceso prohibido a la caché persistente entre dominios
El contenido SWF en el entorno limitado de la aplicación no puede usar la caché entre dominios, una función que se añadió a la actualización 3 de Flash Player 9. Esta función permite que Flash Player utilice la caché persistentemente en el contenido del componente de la plataforma de Adobe y vuelva a utilizarlo en el contenido SWF cargado bajo demanda (eliminando la necesidad de volver a cargar el contenido varias veces).

Privilegios de contenido en entornos limitados que no pertenecen a la aplicación

Los archivos cargados desde una red o Internet se asignan al entorno limitado remoto. Los archivos cargados fuera del directorio de la aplicación se asignan al entorno limitado
la red o local de confianza; esto depende de cómo se creó el archivo y si el usuario tiene confianza explícita en
el archivo a través del Administrador de configuración global de Flash Player. Para más información, consulte
http://www.macromedia.com/support/documentation/es/flashplayer/help/settings_manager.html.
local con sistema de archivos, local con acceso a
30
Restricciones de JavaScript y HTML
A diferencia del contenido en el entorno limitado de seguridad de la aplicación, el contenido JavaScript en un entorno limitado de seguridad que no pertenece a la aplicación puede llamar a la función
eval() para que ejecute
dinámicamente el código generado en cualquier momento. Sin embargo, hay restricciones en JavaScript en un entorno limitado de seguridad que no pertenece a la aplicación. Las restricciones son:
El código JavaScript en un entorno limitado que no pertenece a la aplicación no tiene acceso al objeto
window.runtime y como tal este código no puede ejecutar las API de AIR.
Como valor predeterminado, el contenido en un entorno limitado de seguridad que no pertenece a la aplicación no
puede usar llamadas XMLHttpRequest para cargar datos de otros dominios excepto del dominio que llama a la petición. Sin embargo, el código de aplicación puede conceder permiso al contenido que no pertenece a la aplicación configurando un atributo
allowCrossdomainXHR en el fotograma o en el iframe. Para más información,
consulte “Creación de scripts entre contenido en diferentes dominios” en la página 36.
Hay restricciones para llamar al método window.open() JavaScript. Para más información, consulte
Restricciones para llamar al método window.open() JavaScript” en la página 36.
Para más información, consulte “Restricciones de código del contenido en entornos limitados diferentes” en la página 33
Restricciones para cargar elementos CSS, frame, iframe e img
El contenido HTML en los entornos limitados de seguridad remotos (red) sólo puede cargar contenido CSS, frame,
iframe e img de dominios remotos (de URL de red).
El contenido HTML en los entornos limitados local con sistema de archivos, local con acceso a la red o local de confianza solo pueden cargar contenido CSS, aplicaciones).
frame, iframe e img de entornos limitados locales (no de URL de red o
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR

Seguridad en HTML

El motor de ejecución impone reglas y proporciona mecanismos para superar posibles vulnerabilidades de seguridad en HTML y JavaScript. Se imponen las mismas reglas independientemente si la aplicación está principalmente escrita en JavaScript o si se carga el contenido HTML y JavaScript en una aplicación basada en SWF. El contenido en el entorno limitado de la aplicación y en el entorno limitado de seguridad que no pertenece a la aplicación tiene diferentes privilegios (consulte “Entornos limitados” en la página 28). Cuando se carga contenido en un iframe o en un fotograma, el motor de ejecución proporciona un mecanismo seguro de puente de entorno limitado que permite que el contenido en el fotograma o iframe se comunique de forma segura en el entorno limitado de seguridad de la aplicación.
Este tema describe la arquitectura de seguridad HTML de AIR y cómo utilizar iframes, fotogramas y el puente de entorno limitado para configurar la aplicación.
Para más información, consulte “Cómo evitar errores de JavaScript relacionados con la seguridad” en la página 236.

Información general sobre la configuración de la aplicación basada en HTML

Los fotogramas e iframes proporcionan una estructura conveniente para organizar contenido HTML en AIR. Los fotogramas proporcionan un medio para mantener la persistencia de datos y para trabajar de forma segura con el contenido remoto.
31
Dado que HTML en AIR conserva la organización normal basada en la página, el entorno HTML se regenera completamente si el fotograma superior del contenido HTML “navega” a una página diferente. Se pueden usar fotogramas e iframes para conservar la persistencia de datos en AIR, al igual que en una aplicación Web ejecutándose en un navegador. Defina los objetos de la aplicación principal en el fotograma superior y persistirán siempre que no permita que el fotograma navegue a una nueva página. Use iframes o fotogramas secundarios para cargar y visualizar las partes transitorias de la aplicación. (Hay varias maneras de mantener la persistencia de datos que se pueden usar además o en lugar de los fotogramas. Éstas incluyen cookies, objetos compartidos locales, almacenamiento en archivo local, el almacén de archivo cifrado y el almacenamiento local en base de datos.)
Debido a que HTML en AIR conserva su línea difuminada normal entre el código ejecutable y los datos, AIR sitúa el contenido en el marco superior del entorno HTML en el entorno limitado de la aplicación. Tras el evento de página
load, AIR restringe todas las operaciones como, por ejemplo, eval(), que puede convertir una cadena de texto en un
objeto ejecutable. Esta restricción se impone aun cuando una aplicación no carga el contenido remoto. Para permitir que el contenido HTML ejecute estas operaciones restringidas, debe utilizar fotogramas o iframes para situar el contenido en un entorno limitado ajeno a la aplicación. (Puede ser necesaria la ejecución de contenido en un marco secundario de entorno limitado cuando se utilizan algunos marcos de aplicación de JavaScript que confían en la función aplicación, consulte “Restricciones de código del contenido en entornos limitados diferentes” en la página 33.
Dado que HTML en AIR conserva la habilidad de cargar contenido remoto posiblemente no seguro, AIR impone una política de mismo origen que evita que el contenido en un dominio interactúe con el contenido en otro. Para permitir la interacción entre el contenido de aplicación y el contenido en otro dominio, se puede configurar un puente que actúe como la interfaz entre un fotograma principal y uno secundario.
eval().) Para obtener una lista completa de las restricciones en JavaScript en el entorno limitado de la
Configuración de una relación de entorno limitado principal y secundario
AIR añade los atributos sandboxRoot y documentRoot al los elementos frame e iframe HTML. Estos atributos permiten tratar al contenido de aplicación como si proviniera de otro dominio:
Atributo Descripción
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
32
sandboxRoot La URL que se debe utilizar para determinar el entorno limitado y dominio
documentRoot La URL desde donde cargar el contenido del fotograma. Se deben utilizar los
donde colocar el contenido del fotograma. Se deben utilizar los esquemas de
file:, http: o https:.
URL
esquemas URL file:, app: o app-storage:.
En el siguiente ejemplo se asigna el contenido instalado en el subdirectorio del entorno limitado de la aplicación para que se ejecute en el entorno limitado remoto y en el dominio www.example.com:
<iframe src="ui.html" sandboxRoot="http://www.example.com/local/" documentRoot="app:/sandbox/"> </iframe>
Configuración de un puente entre fotogramas principales y secundarios en diferentes entornos limitados o dominios
AIR añade las propiedades childSandboxBridge y parentSandboxBridge al objeto window de cualquier fotograma secundario. Estas propiedades permiten definir puentes para que actúen como interfaces entre un fotograma principal y uno secundario. Cada puente va en una dirección:
childSandboxBridge — La propiedad childSandboxBridge permite que el fotograma secundario exponga una
interfaz al contenido en el fotograma principal. Para exponer una interfaz, se debe establecer la propiedad
childSandbox a una función u objeto en el fotograma secundario. Entonces puede acceder al objeto o función desde
el contenido en el fotograma principal. En el siguiente ejemplo se muestra el modo en que un script ejecutándose en un fotograma secundario puede exponer al fotograma principal un objeto que contiene una función y una propiedad:
var interface = {}; interface.calculatePrice = function(){ return .45 + 1.20; } interface.storeID = "abc" window.childSandboxBridge = interface;
Si este contenido secundario se encuentra en un iframe y se le asignó un ID de "elemento secundario", se puede acceder a la interfaz desde el contenido principal leyendo la propiedad
var childInterface = document.getElementById("child").childSandboxBridge; air.trace(childInterface.calculatePrice()); //traces "1.65" air.trace(childInterface.storeID)); //traces "abc"
parentSandboxBridge — La propiedad parentSandboxBridge permite que el fotograma principal exponga una
childSandboxBridge del fotograma:
interfaz al contenido en el fotograma secundario. Para exponer una interfaz, se debe establecer la propiedad
parentSandbox del fotograma secundario a una función u objeto en el fotograma principal. Entonces puede acceder
al objeto o función desde el contenido en el fotograma secundario. En el siguiente ejemplo se muestra el modo en que un script ejecutándose en un fotograma principal puede exponer al fotograma secundario un objeto que contiene una función de guardar:
var interface = {}; interface.save = function(text){ var saveFile = air.File("app-storage:/save.txt"); //write text to file } document.getElementById("child").parentSandboxBridge = interface;
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
Usando esta interfaz, el contenido en el fotograma secundario podría guardar texto en un archivo denominado save.txt. Sin embargo, no tendría ningún otro acceso al sistema de archivos. En general, el contenido de aplicación debe exponer una interfaz lo más limitada posible a otros entornos limitados. El contenido secundario puede llamar a la función save de la siguiente manera:
var textToSave = "A string."; window.parentSandboxBridge.save(textToSave);
Si el contenido secundario intenta definir una propiedad del objeto parentSandboxBridge, el motor de ejecución emite una excepción SecurityError. Si el contenido principal intenta definir una propiedad del objeto
childSandboxBridge, el motor de ejecución emite una excepción SecurityError.

Restricciones de código del contenido en entornos limitados diferentes

Como se describe en la introducción a este tema, “Seguridad en HTML” en la página 31, el motor de ejecución impone reglas y proporciona mecanismos para superar posibles vulnerabilidades de seguridad en HTML y JavaScript. Este tema lista dichas restricciones. Si el código intenta llamar a estas API restringidas, el motor de ejecución emite un error con el mensaje “Adobe AIR runtime security violation for JavaScript code in the application security sandbox” (Infracción de seguridad del motor de ejecución de Adobe AIR para el código JavaScript en el entorno limitado de seguridad de la aplicación).
Para más información, consulte “Cómo evitar errores de JavaScript relacionados con la seguridad” en la página 236.
33
Restricciones en el uso de la función eval() JavaScript y técnicas similares
Para el contenido HTML en el entorno limitado de seguridad de la aplicación, hay limitaciones en el uso de API que pueden transformar dinámicamente cadenas en código ejecutable después de cargar el código (después de que el
onloaddel elemento body se haya distribuido y la función del controlador onload haya terminado de
evento ejecutarse). Esta limitación es para evitar que la aplicación accidentalmente inserte (y ejecute) código desde orígenes que no pertenecen a la aplicación (como dominios de red potencialmente inseguros).
Por ejemplo, si la aplicación usa datos de cadena de un origen remoto para escribir en la propiedad innerHTML de un elemento DOM, la cadena puede incluir código ejecutable (JavaScript) que podría realizar operaciones no seguras. Sin embargo, mientras que el contenido se está cargando, no hay riesgo de que se inserten cadenas remotas en el DOM.
Una restricción es el uso de la función aplicación y después de procesar el controlador de eventos onload, sólo se puede usar la función limitadas. Las siguientes reglas se aplican al uso de la función limitado de seguridad de la aplicación:
Se permiten expresiones relacionadas con literales. Por ejemplo:
eval("null"); eval("3 + .14"); eval("'foo'");
Se permiten literales de objetos, como en el siguiente ejemplo:
{ prop1: val1, prop2: val2 }
Se prohíben los setter/getters literales de objetos, como en el siguiente ejemplo:
{ get prop1() { ... }, set prop1(v) { ... } }
eval() JavaScript. Una vez que se carga el código en el entorno limitado de la
eval() en maneras
eval()después de que se cargue el código del entorno
Se permiten literales de conjuntos, como en el siguiente ejemplo:
[ val1, val2, val3 ]
Se prohíben las expresiones relacionadas con las lecturas de propiedades, como en el siguiente ejemplo:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
a.b.c
Seguridad en AIR
La invocación de función está prohibida.
Las definiciones de funciones están prohibidas.
La configuración de cualquier propiedad está prohibida.
Los literales de funciones están prohibidos.
Sin embargo, mientras se carga el código, antes del evento de eventos
onload, estas restricciones no se aplican al contenido en el entorno limitado de seguridad de la aplicación.
onload y durante la ejecución de la función del controlador
Por ejemplo, después de cargar el código, el código siguiente hace que el motor de ejecución emita una excepción:
eval("alert(44)"); eval("myFunction(44)"); eval("NativeApplication.applicationID");
El código generado dinámicamente, como el que se crea cuando se llama a la función eval(), presenta un riego de seguridad si se permite dentro del entorno limitado de la aplicación. Por ejemplo, una aplicación puede accidentalmente ejecutar una cadena cargada de un dominio de red y dicha cadena puede tener código malintencionado. Por ejemplo, puede ser código para eliminar o alterar archivos en el equipo del usuario. O puede ser código que informa a un dominio de red que no es de confianza sobre el contenido de un archivo local.
34
A continuación se incluyen formas de generar código dinámico:
Llamar a la función eval().
Usar las propiedades innerHTML o funciones DOM para insertar etiquetas de script que cargan un script fuera del
directorio de la aplicación.
Usar las propiedades innerHTML o funciones DOM para insertar etiquetas de script que tienen código insertado
(en lugar de cargar un script a través del atributo
src).
Configurar el atributo src para que las etiquetas script carguen un archivo JavaScript que se encuentra fuera del
directorio de la aplicación.
Usar el esquema javascript de URL (como en href="javascript:alert('Test')").
Usar la función setInterval() o setTimout() donde el primer parámetro (definiendo la función para que se
ejecute de forma asíncrona) es una cadena (para evaluar) en vez de un nombre de función (como en
setTimeout('x = 4', 1000)).
Llamar a document.write() o document.writeln().
El código en el entorno limitado de seguridad de la aplicación solo puede utilizar estos métodos mientras se carga el contenido.
Estas restricciones no impiden el uso de
eval() con los literales de objetos JSON. Esto permite que el contenido de
aplicación trabaje con la biblioteca JSON JavaScript. Sin embargo, está restringido en el uso de código JSON sobrecargado (con controladores de eventos).
Para otros marcos de Ajax y bibliotecas de código JavaScript, verifique si el código en el marco o biblioteca funciona dentro de estas restricciones en código generado dinámicamente. Si no funcionan, incluya cualquier contenido que usa el marco o la biblioteca en un entorno limitado de seguridad que no pertenece a la aplicación. Para·más·información,·consulte·“Privilegios de contenido en entornos limitados que no pertenecen a la aplicación” en la página 30·y·“Utilización de scripts entre contenido de la aplicación y contenido que no pertenece a la aplicación” en la página 41. Adobe mantiene una lista de marcos de Ajax que admiten el entorno limitado de seguridad de aplicación, en http://www.adobe.com/es/products/air/develop/ajax/features/.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
A diferencia del contenido en el entorno limitado de seguridad de la aplicación, el contenido JavaScript en un entorno limitado de seguridad que no pertenece a la aplicación puede llamar a la función
eval() para que ejecute
dinámicamente el código generado en cualquier momento.
Restricciones para acceder a las API de AIR (para entornos limitados ajenos a la aplicación)
El código JavaScript en un entorno limitado que no pertenece a la aplicación no tiene acceso al objeto
window.runtime y como tal este código no puede ejecutar las API de AIR. Si el contenido en un entorno limitado de
seguridad que no pertenece a la aplicación llama al siguiente código, la aplicación emite una excepción TypeError:
try { window.runtime.flash.system.NativeApplication.nativeApplication.exit(); } catch (e) { alert(e); }
El tipo de excepción es TypeError (valor no definido), porque el contenido en el entorno limitado que no pertenece a la aplicación no reconoce el objeto
Se puede exponer la funcionalidad del motor de ejecución al contenido en un entorno limitado que no pertenece a la aplicación usando un puente de script. Para más información, consulte “Utilización de scripts entre contenido de la
aplicación y contenido que no pertenece a la aplicación” en la página 41.
window.runtime, por lo tanto se lo considera un valor no definido.
35
Restricciones para usar llamadas XMLHttpRequest
El contenido HTML en el entorno limitado de seguridad de la aplicación no puede utilizar métodos XMLHttpRequest sincrónicos para cargar datos desde fuera del entorno limitado de la aplicación mientras se está cargando el contenido HTML y durante el evento
onLoad.
De forma predeterminada, el contenido HTML en entornos limitados de seguridad que no pertenecen a la aplicación no pueden usar el objeto JavaScript XMLHttpRequest para cargar datos de dominios que no sea el dominio que llama a la petición. Una etiqueta
frame o iframe puede incluir el atributo allowcrosscomainxhr. La configuración de este
atributo a cualquier valor que no sea null permite que el contenido en el fotograma o iframe use el objeto XMLHttpRequest Javascript para cargar datos de dominios que no sea el dominio del código que llama a la petición:
<iframe id="UI" src="http://example.com/ui.html" sandboxRoot="http://example.com/" allowcrossDomainxhr="true" documentRoot="app:/"> </iframe>
Para más información, consulte “Creación de scripts entre contenido en diferentes dominios” en la página 36.
Restricciones para cargar elementos CSS, frame, iframe e img (para el contenido en entornos limitados que no pertenecen a la aplicación)
El contenido HTML en los entornos limitados de seguridad remotos (red) solo puede cargar contenido CSS, frame,
iframe e img de entornos limitados remotos (de URL de red).
El contenido HTML en los entornos limitados local con sistema de archivos, local con acceso a la red o local de confianza solo pueden cargar contenido CSS, frame, iframe e entornos limitados remotos).
img de entornos limitados locales (no de aplicaciones o
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
Restricciones para llamar al método window.open() JavaScript
Si una ventana que se crea a través de una llamada al método window.open() JavaScript muestra contenido de un entorno limitado de seguridad que no pertenece a la aplicación, el título de la ventana comienza con el título de la ventana principal (de inicio), seguido por dos puntos (:). No se puede utilizar el código para trasladar esa porción del título de la ventana fuera de la pantalla.
El contenido en entornos limitados de seguridad que no pertenecen a la aplicación solo pueden llamar exitosamente al método impide que el contenido que no pertenece a la aplicación cree ventanas que se pueden utilizar maliciosamente (por ejemplo, para ataques de suplantación de identidad (phishing). Asimismo, el controlador de eventos para el evento de ratón o teclado no puede definir el método llamando a la función
window.open() JavaScript en respuesta a un evento activado por el ratón o interacción del teclado. Esto
window.open() para ejecutarse después de una demora (por ejemplo
setTimeout()).
36
El contenido en entornos limitados remotos (red) sólo puede utilizar el método contenido en entornos limitados de red remotos. No puede utilizar el método de la aplicación o entornos limitados locales.
El contenido en los entornos limitados local con sistema de archivos, local con acceso a la red o local de confianza (consulte “Entornos limitados” en la página 28) solo puede usar el método entornos limitados locales. No puede utilizar el método entornos limitados remotos.
window.open() para abrir contenido de la aplicación o
window.open() para abrir el
window.open() para abrir contenido
window.open() para abrir contenido en
Errores al llamar a código restringido
Si se llama al código que no se puede utilizar en un entorno limitado debido a estas restricciones de seguridad, el motor de ejecución distribuye un error de JavaScript: “Adobe AIR runtime security violation for JavaScript code in the application security sandbox” (Infracción de seguridad del motor de ejecución de Adobe AIR para el código JavaScript en el entorno limitado de seguridad de la aplicación).
Para más información, consulte “Cómo evitar errores de JavaScript relacionados con la seguridad” en la página 236.

Protección del entorno limitado al cargar contenido HTML de una cadena

El método loadString() de la clase HTMLLoader permite crear contenido HTML en tiempo de ejecución. No obstante, los datos que se utilizan como contenido HTML pueden verse dañados si la información se carga desde un origen de Internet no seguro. Por este motivo, de forma predeterminada, el código HTML creado con el
loadString() no se sitúa en el entorno limitado de la aplicación y no tiene acceso a las API de AIR. Sin
método embargo, puede establecer la propiedad HTMLLoader en true para que sitúe HTML creado utilizando el método aplicación. Para obtener más información, consulte “Carga del contenido HTML desde una cadena” en la página 234.
placeLoadStringContentInApplicationSandbox de un objeto
loadString() en el entorno limitado de la

Creación de scripts entre contenido en diferentes dominios

Las aplicaciones de AIR tienen privilegios especiales cuando se instalan. Es fundamental que los mismos privilegios no se filtren a otro contenido, incluyendo archivos remotos y archivos locales que no son parte de la aplicación.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR

Puente de entorno limitado de AIR

Normalmente, el contenido de otros dominios no pueden llamar a scripts en otros dominios. Para proteger las aplicaciones de AIR de filtraciones accidentales de control o información privilegiada, se implementan las siguientes restricciones en el contenido en el entorno limitado de seguridad
El código en el entorno limitado de seguridad de la aplicación no se permite en otros entornos limitados llamando
al método
Security.allowDomain(). Con la llamada a este método desde el entorno limitado de seguridad de la
aplicación se emitirá un error.
Se impide la importación de contenido que no pertenece a la aplicación en el entorno limitado de la aplicación si
se define la propiedad
LoaderContext.securityDomain o LoaderContext.applicationDomain.
Aún hay casos donde la aplicación de AIR principal requiere que el contenido de un dominio remoto tenga acceso controlado a los scripts en la aplicación de AIR principal o viceversa. Para lograr esto, el motor de ejecución proporciona un mecanismo de puente de entorno limitado, que actúa como una puerta de enlace entre los dos entornos limitados. Un puente de entorno limitado puede proporcionar interacción explícita entre entornos limitados de seguridad de aplicación y remotos.
El puente de entorno limitado expone dos objetos al que pueden acceder ambos scripts cargados y los que se están cargando:
El objeto parentSandboxBridge permite que el contenido que se está cargando exponga las propiedades y
funciones a los scripts en el contenido cargado.
El objeto childSandboxBridge permite que el contenido cargado exponga las propiedades y funciones a los scripts
en el contenido que se está cargando.
aplicación (contenido instalado con la aplicación).
37
Los objetos expuestos a través del puente de entorno limitado se pasan por valor y no por referencia. Todos los datos se serializan. Esto significa que los objetos expuestos por un lado del puente no pueden ser definidos por el otro lado del puente y que los objetos expuestos no tienen tipo. Asimismo, solo se pueden exponer funciones y objetos simples; no se pueden exponer objetos complejos.
Si el contenido secundario intenta definir una propiedad del objeto parentSandboxBridge, el motor de ejecución emite una excepción SecurityError. De igual manera, si el contenido principal intenta definir una propiedad del objeto childSandboxBridge, el motor de ejecución emite una excepción SecurityError.

Ejemplo de puente de entorno limitado (SWF)

Supongamos que una aplicación de almacén de música de AIR quiere permitir que los archivos SWF remotos transmitan el precio de los álbumes, pero no quiere que el archivo SWF remoto divulgue si el precio es un precio de oferta. Para hacer esto, una clase StoreAPI proporciona un método para adquirir el precio, pero oculta el precio de oferta. Una instancia de esta clase StoreAPI se asigna a continuación a la propiedad LoaderInfo del objeto Loader que carga el SWF remoto.
El siguiente es el código para almacén de música de AIR:
parentSandboxBridge del objeto
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Music Store" creationComplete="initApp()"> <mx:Script> import flash.display.Loader; import flash.net.URLRequest;
private var child:Loader; private var isSale:Boolean = false;
private function initApp():void { var request:URLRequest = new URLRequest("http://[www.yourdomain.com]/PriceQuoter.swf")
child = new Loader(); child.contentLoaderInfo.parentSandboxBridge = new StoreAPI(this); child.load(request); container.addChild(child); } public function getRegularAlbumPrice():String { return "$11.99"; } public function getSaleAlbumPrice():String { return "$9.99"; } public function getAlbumPrice():String { if(isSale) { return getSaleAlbumPrice(); } else { return getRegularAlbumPrice(); } } </mx:Script> <mx:UIComponent id="container" /> </mx:WindowedApplication>
38
El objeto StoreAPI llama a la aplicación principal para recuperar el precio normal del álbum, pero devuelve “No disponible” cuando se llama al método
getSaleAlbumPrice(). El siguiente código define la clase StoreAPI:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
public class StoreAPI { private static var musicStore:Object;
public function StoreAPI(musicStore:Object) { this.musicStore = musicStore; }
public function getRegularAlbumPrice():String { return musicStore.getRegularAlbumPrice(); }
public function getSaleAlbumPrice():String { return "Not available"; }
public function getAlbumPrice():String { return musicStore.getRegularAlbumPrice(); } }
El siguiente código representa un ejemplo del archivo SWF PriceQuoter que informa sobre el precio de venta pero no puede informar sobre el pecio de oferta:
39
package { import flash.display.Sprite; import flash.system.Security; import flash.text.*;
public class PriceQuoter extends Sprite { private var storeRequester:Object;
public function PriceQuoter() { trace("Initializing child SWF"); trace("Child sandbox: " + Security.sandboxType); storeRequester = loaderInfo.parentSandboxBridge;
var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf);
tf.appendText("Store price of album is: " + storeRequester.getAlbumPrice()); tf.appendText("\n"); tf.appendText("Sale price of album is: " + storeRequester.getSaleAlbumPrice()); } } }

Ejemplo de puente de entorno limitado (HTML)

En el contenido HTML, las propiedades parentSandboxBridge y childSandboxBridge se añaden al objeto window JavaScript de un documento secundario. Para obtener un ejemplo de cómo configurar las funciones del puente en el contenido HTML, consulte “Definición de una interfaz de puente de entorno limitado” en la página 250.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR

Limitación de la exposición de API

Cuando se exponen puentes de entorno limitado, es importante exponer las API de nivel alto que limitan el grado del uso indebido. Tenga en cuenta que el contenido que está llamando a la implementación del puente puede dejar el sistema vulnerable (por ejemplo, a través de una inyección de código). Entonces, por ejemplo, la exposición de un método vulnerable a ser utilizado incorrectamente. Sería mejor exponer una API
readFile(path:String) (que lee los contenidos de un archivo arbitrario) a través de un puente es
readApplicationSetting() que no usa
una ruta y lee un archivo específico. El método más semántico limita el daño que puede hacer una aplicación una vez que parte de la misma está en peligro.
Véase también
Utilización de scripts entre contenidos en diferentes entornos limitados de seguridad” en la página 249
Entorno limitado de la aplicación” en la página 29
Privilegios de contenido en entornos limitados que no pertenecen a la aplicación” en la página 30

Escritura en el disco

40
Las aplicaciones que se ejecutan en un navegador Web solo tienen una interacción limitada con el sistema de archivos local del usuario. Los navegadores Web implementan políticas de seguridad que aseguran que el equipo de un usuario no corre riesgo como resultado de cargar contenido Web. Por ejemplo, los archivos SWF que se ejecutan a través de Flash Player en un navegador no pueden interactuar directamente con los archivos que ya se encuentran en el equipo del usuario. Los objetos y cookies compartidos se pueden escribir en el disco de un equipo de usuario para mantener las preferencias de usuario y otros datos, pero este es el límite de la interacción con el sistema de archivos. Dado que las aplicaciones de AIR se instalan de forma nativa, tienen un diferente contrato de seguridad, uno que incluye la capacidad de leer y escribir en todo el sistema de archivos local.
Esta libertad conlleva gran responsabilidad para los desarrolladores. Las inseguridades de aplicación accidentales ponen en peligro no sólo la funcionalidad de la aplicación, sino también la integridad del equipo del usuario. Por esta razón, los desarrolladores deben leer “Prácticas recomendadas de seguridad para desarrolladores” en la página 42.
Los desarrolladores de AIR puede acceder y escribir archivos en el sistema de archivos local usando varias convenciones de esquemas de URL:
Esquema de URL Descripción
app:/ Un alias al directorio de la aplicación. Los archivos que se acceden desde esta ruta se les asignan un entorno
app-storage:/ Un alias al directorio de almacenamiento local, estandarizado por el motor de ejecución. Los archivos que se
file:/// Un alias que representa la raíz del disco duro del usuario. Un archivo que se accede desde esta ruta se le asigna un
limitado de la aplicación y tienen privilegios completos concedidos por el motor de ejecución.
acceden desde esta ruta se les asigna un entorno limitado que no pertenece a la aplicación.
entorno limitado de la aplicación si el archivo existe en el directorio de la aplicación, de lo contrario se le asigna un entorno limitado que no pertenece a la aplicación.
Nota: las aplicaciones de AIR no pueden modificar el contenido usando el esquema de URL app:. Asimismo, el directorio de la aplicación puede leer solo debido a la configuración del administrador.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
A menos que haya restricciones de administrador en el equipo del usuario, las aplicaciones de AIR tienen el privilegio de escribir en cualquier ubicación en el disco duro del usuario. Se recomienda que los desarrolladores usen la ruta
storage:/ para el almacenamiento local relacionado con su aplicación. Los archivos que se escriben en app­storage:/ desde una aplicación se colocan en una ubicación estándar:
Seguridad en AIR
app-
En Mac OS: el directorio de almacenamiento de una aplicación es <appData>/<appId>/Local Store/ donde
<appData> es la carpeta de preferencias del usuario. Normalmente es /Usuarios/<usuario>/Biblioteca/Preferencias
En Windows: el directorio de almacenamiento de una aplicación es <appData>\<appId>\Local Store\ donde
<appData> es la carpeta especial del usuario CSIDL_APPDATA. Normalmente es C:\Documents and Settings\<Nombre de usuario>\Application Data
En Linux: <appData>/<appID>/Local Store/, donde <appData> es /home/<user>/.appdata
Si una aplicación está diseñada para interactuar con archivos existentes en el sistema de archivos del usuario, asegúrese de leer “Prácticas recomendadas de seguridad para desarrolladores” en la página 42.

Cómo trabajar de forma segura con contenido que no es de confianza

41
El contenido que no se asigna al entorno limitado de la aplicación puede proporcionar una funcionalidad adicional de uso de scripts para la aplicación pero solo si cumple con los criterios de seguridad del motor de ejecución. Este tema explica el contrato de seguridad de AIR con el contenido que no pertenece a la aplicación.

Security.allowDomain()

Las aplicaciones de AIR restringen el acceso al uso de scripts para el contenido que no pertenece a la aplicación más severamente que el plug-in de navegador de Flash Player restringe el acceso al uso de scripts para el contenido que no es de confianza. Por ejemplo, en Flash Player en el navegador, cuando un archivo SWF que se asigna al entorno limitado a cualquier archivo SWF cargado desde el dominio especificado. El método equivalente no se permite por parte del contenido de a la aplicación en el sistema de archivos del usuario. Los archivos remotos no pueden acceder de forma directa al entorno limitado de la aplicación, independientemente de las llamadas al método
local-trusted llama al método System.allowDomain(), el acceso a la secuencia de comandos se concede
aplicación en las aplicaciones de AIR, ya que concedería acceso peligroso al archivo que no pertenece
Security.allowDomain().

Utilización de scripts entre contenido de la aplicación y contenido que no pertenece a la aplicación

Las aplicaciones de AIR que usan script entre contenido de la aplicación y contenido que no pertenece a la aplicación tienen condiciones más complejas de seguridad. Los archivos que no están en el entorno limitado de la aplicación sólo tienen permitido acceder a las propiedades y métodos de los archivos en el entorno limitado de la aplicación a través del uso de un puente de entorno limitado. Un puente de entorno limitado actúa como una puerta de enlace entre el contenido de aplicación y el contenido que no pertenece a la aplicación, proporcionando una interacción explícita entre los dos archivos. Cuando se usan correctamente, los puentes de entorno limitado brindan una capa adicional de seguridad, restringiendo el contenido que no pertenece a la aplicación de acceder a las referencias de objetos que forman parte del contenido de aplicación.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR
La ventaja de los puentes de entorno limitado se describe mejor en este ejemplo. Supongamos que una aplicación de almacén de música de AIR desea proporcionar una API a los anunciantes que quieren crear sus propios archivos SWF, con los que la aplicación de almacén puede comunicarse. El almacén desea proporcionar a los anunciantes métodos para buscar artistas y CD en el almacén, pero también quieren aislar algunos métodos y propiedades del archivo SWF de terceros por razones de seguridad.
Un puente de entorno limitado puede brindar esta funcionalidad. De forma predeterminada, el contenido cargado externamente en una aplicación de AIR durante el tiempo de ejecución no tiene acceso a ningún método ni propiedad en la aplicación principal. Con una implementación personalizada del puente de entorno limitado, un desarrollador puede proporcionar servicios al contenido remoto sin exponer estos métodos o propiedades. Considere al puente de entorno limitado como una vía entre el contenido de confianza y el contenido que no es de confianza, brindando comunicación entre el contenido cargado y el cargador sin exponer las referencias de objetos.
Para más información sobre cómo utilizar de forma segura los puentes de entorno limitado, consulte “Creación de
scripts entre contenido en diferentes dominios” en la página 36.

Protección contra la generación dinámica de contenido SWF no seguro

El método Loader.loadBytes() proporciona un modo para que una aplicación genere contenido SWF desde un conjunto de bytes. Sin embargo, los ataques a los datos cargados desde orígenes remotos podrían causar un daño serio cuando se carga el contenido. Esto es cierto cuando se cargan datos en el entorno limitado de la aplicación, donde el contenido SWF generado puede acceder al conjunto entero de las API de AIR.
42
Existen usos legítimos para la utilización del método se puede usar el método
loadBytes() para generar datos de imagen para controlar la coordinación de la visualización
loadBytes() sin generar código SWF ejecutable. Por ejemplo,
de la imagen. Asimismo, existen usos legítimos que si utilizan la ejecución del código, como la creación dinámica de contenido SWF para reproducción de audio. En AIR, de forma predeterminada, el método cargar el contenido SWF; solo permite cargar contenido de imágenes. En AIR, la propiedad método permitir explícitamente que la aplicación use
loadBytes() tiene una propiedad allowLoadBytesCodeExecution, que se puede definir en true para
loadBytes() para cargar contenido SWF ejecutable. El siguiente código
loadBytes()no permite
loaderContext del
muestra la manera de usar esta función:
var loader:Loader = new Loader(); var loaderContext:LoaderContext = new LoaderContext(); loaderContext.allowLoadBytesCodeExecution = true; loader.loadBytes(bytes, loaderContext);
Si se llama a loadBytes() para cargar el contenido SWF y la propiedad allowLoadBytesCodeExecution del objeto LoaderContext está definida en
false (el valor predeterminado), el objeto Loader emite una excepción SecurityError.
Nota: es posible que esta API cambie en una futura versión de Adobe AIR. Cuando ocurra, tal vez tenga que recompilar el contenido que usa la propiedad
allowLoadBytesCodeExecution de la clase LoaderContext.

Prácticas recomendadas de seguridad para desarrolladores

Aunque las aplicaciones de AIR se crean usando tecnologías Web, es importante que los desarrolladores observen que no están trabajando dentro del entorno limitado de seguridad del navegador. Esto significa que es posible crear aplicaciones de AIR que pueden causar daño al sistema local, ya sea accidental o malintencionadamente. AIR intenta minimizar este riesgo, pero aún hay maneras donde se pueden introducir vulnerabilidades. Este tema abarca importantes situaciones potenciales no seguras.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR

Riesgos de importar archivos en un entorno limitado de seguridad de la aplicación

Los archivos que existen en el directorio de la aplicación se asignan al entorno limitado de la aplicación y tienen privilegios completos del motor de ejecución. Se recomienda que las aplicaciones que escriben en el sistema de archivos local escriban en el equipo del usuario, por ende los archivos no están asignados al entorno limitado de la aplicación y presentan un riesgo reducido de seguridad. Se recomienda que los desarrolladores consideren los siguientes puntos:
app-storage:/. Este directorio existe de forma separada de los archivos de la aplicación en
Incluir un archivo en un archivo de AIR (en la aplicación instalada) sólo si es necesario.
Incluir un archivo de script en un archivo de AIR (en la aplicación instalada) sólo si el comportamiento se
comprende cabalmente y es de confianza.
No escribir ni modificar el contenido en el directorio de la aplicación. El motor de ejecución impide que las
aplicaciones escriban o modifiquen los archivos y directorios usando el esquema de URL excepción SecurityError.
app:/ emitiendo una a
No utilizar datos de un origen de red como parámetros para los métodos de la API de AIR que pueden llevar a la
ejecución de código. Esto incluye el uso del método
Loader.loadBytes() y la función eval() JavaScript.

Riesgos de usar un origen externo para determinar rutas

Una aplicación de AIR puede correr riesgos cuando se usan datos o contenido externo. Por esta razón, tenga cuidado cuando utiliza datos de la red o del sistema de archivos. La responsabilidad de confianza depende del desarrollador y las conexiones de red que realizan, pero la carga de datos externos es intrínsicamente peligrosa y no se debería usar para operaciones confidenciales. No se recomienda que los desarrolladores:
43
Usen datos de un origen de red para determinar un nombre de archivo.
Utilicen datos de un origen de red para construir una URL que usa la aplicación para enviar información privada.

Riesgos de usar, almacenar o transmitir credenciales no seguras

El almacenamiento de credenciales de usuario en el sistema de archivos local del usuario intrínsicamente introduce el riesgo de que estas credenciales sean vulnerables. Se recomienda que los desarrolladores consideren los siguientes puntos:
Si se deben almacenar las credenciales de forma local, deben cifrar las credenciales cuando se escribe en el sistema
de archivos local. El motor de ejecución proporciona un almacenamiento cifrado exclusivo para cada aplicación instalada, a través de la clase EncryptedLocalStore. Para más información, consulte “Almacenamiento de datos
cifrados” en la página 216.
No se deben transmitir credenciales de usuario no cifradas a un origen de red a menos que el origen sea de
confianza.
Nunca se debe especificar una contraseña predeterminada en la creación de una credencial, los usuarios deben crear
las propias. Los usuarios que dejan una contraseña predeterminada exponen sus credenciales a un atacante que ya conoce la contraseña predeterminada.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Seguridad en AIR

Riesgos de un ataque de desactualización

Durante la instalación de la aplicación, el motor de ejecución verifica que la versión de la aplicación no está actualmente instalada. Si una aplicación ya está instalada, el motor de ejecución compara la cadena de la versión con la versión que se está instalando. Si esta cadena es diferente, el usuario puede elegir actualizar la instalación. El motor de ejecución no garantiza que la versión recién instalada sea más nueva que la versión más antigua, solo que es diferente. Un atacante puede distribuir una versión anterior al usuario para evitar una debilidad de seguridad. Por esta razón, se recomienda que el desarrollador verifique las versiones cuando se ejecuta la aplicación. Es una buena idea que las aplicaciones verifiquen en la red las actualizaciones requeridas. De ese modo, aun si un atacante engaña al usuario para que ejecute una versión antigua, dicha versión antigua reconocerá que se debe actualizar. Asimismo, el uso de un esquema claro de versiones para la aplicación hace más difícil engañar a los usuarios para que instalen una versión desactualizada. Para más información, consulte “Definición de propiedades en el archivo descriptor de la
aplicación” en la página 46.

Firma de código

Se requiere que todos los archivos de instalación de AIR tengan el código firmado. La firma de código es un proceso criptográfico de confirmar que el origen especificado del software es veraz. Las aplicaciones de AIR se pueden firmar vinculando un certificado de una entidad emisora de certificados externa (CA), o bien, creando su propio certificado. Se recomienda un certificado comercial de una CA conocida ya que proporciona la garantía a los usuarios de que están instalando la aplicación real y no una falsificación. Sin embargo, los certificados con firma automática se pueden crear
adt del SDK o usando Flash, Flex Builder u otra aplicación que usa adt para la generación de certificados. Los
usando certificados con firma automática no proporcionan ninguna garantía que la aplicación que se está instalando es genuina.
44
Para más información acerca de la firma digital de AIR, consulte “Firma digital de archivos de AIR” en la página 324 y “Creación de aplicaciones de AIR con las herramientas de la línea de comandos” en la página 359.

Capítulo 8: Configuración de las propiedades de una aplicación de AIR

Aparte de todos los archivos y demás objetos que conforman una aplicación de AIR, cada aplicación de AIR requiere un archivo descriptor de la aplicación. El archivo descriptor de la aplicación es un archivo XML que define las propiedades básicas de la aplicación.
Cuando se desarrollan aplicaciones de AIR con Adobe® AIR™ Update para Adobe® Flash® CS3 Professional o Adobe® Flash® CS4 Professional, la aplicación se genera automáticamente al crear un proyecto de AIR. Para abrir una ventana que permite modificar la configuración del descriptor de la aplicación, vaya al menú Comandos > AIR - Configuración de aplicación e instalador. El archivo descriptor de la aplicación también puede modificarse manualmente.

Estructura del archivo descriptor de la aplicación

El archivo descriptor de la aplicación contiene propiedades que afectan al conjunto de la aplicación, como son el nombre, la versión, el aviso de copyright, etc. El archivo descriptor puede tener cualquier nombre de archivo. Cuando se crea un archivo de AIR utilizando la configuración predeterminada en Flash CS3 o Flash CS4, el nombre del archivo descriptor de la aplicación pasa a ser
application.xml
y se sitúa dentro de un directorio especial en el paquete de AIR.
45
El siguiente es un ejemplo de archivo descriptor de una aplicación:
<?xml version="1.0" encoding="utf-8" ?> <application xmlns="http://ns.adobe.com/air/application/1.5"> <id>com.example.HelloWorld</id> <version>2.0</version> <filename>Hello World</filename> <name>Example Co. AIR Hello World</name> <description>
<text xml:lang="en">This is a example.</text> <text xml:lang="fr">C'est un exemple.</text> <text xml:lang="es">Esto es un ejemplo.</text>
</description> <copyright>Copyright (c) 2006 Example Co.</copyright> <initialWindow> <title>Hello World</title> <content> HelloWorld-debug.swf </content> <systemChrome>none</systemChrome> <transparent>true</transparent> <visible>true</visible> <minimizable>true</minimizable> <maximizable>false</maximizable> <resizable>false</resizable> <width>640</width> <height>480</height> <minSize>320 240</minSize> <maxSize>1280 960</maxSize> </initialWindow> <installFolder>Example Co/Hello World</installFolder>
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
<programMenuFolder>Example Co</programMenuFolder> <icon> <image16x16>icons/smallIcon.png</image16x16> <image32x32>icons/mediumIcon.png</image32x32> <image48x48>icons/bigIcon.png</image48x48> <image128x128>icons/biggestIcon.png</image128x128> </icon> <customUpdateUI>true</customUpdateUI> <allowBrowserInvocation>false</allowBrowserInvocation> <fileTypes> <fileType> <name>adobe.VideoFile</name> <extension>avf</extension> <description>Adobe Video File</description> <contentType>application/vnd.adobe.video-file</contentType> <icon> <image16x16>icons/avfIcon_16.png</image16x16> <image32x32>icons/avfIcon_32.png</image32x32> <image48x48>icons/avfIcon_48.png</image48x48> <image128x128>icons/avfIcon_128.png</image128x128> </icon> </fileType> </fileTypes> </application>
46

Definición de propiedades en el archivo descriptor de la aplicación

Utilice los atributos y elementos XML del descriptor de la aplicación para definir los siguientes tipos de propiedades para su aplicación de AIR:
Versión necesaria del motor de ejecución de AIR.
Identidad de la aplicación.
Carpetas de instalación y de menús de programa.
Propiedades de ventana y contenido inicial.
Archivos de icono de la aplicación.
Si la aplicación proporciona una IU personalizada para actualizaciones.
Si la aplicación se puede invocar mediante contenido SWF que se ejecute en el navegador del usuario.
Asociaciones de tipos de archivos.

Especificación de la versión necesaria de AIR

Los atributos del elemento raíz de un archivo descriptor de la aplicación, application, especifican la versión necesaria del motor de ejecución de AIR:
<application xmlns="http://ns.adobe.com/air/application/1.5">
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
xmlns El espacio de nombre de AIR, el cual debe definirse como espacio de nombre XML predeterminado. El espacio de nombre cambia con cada edición principal de AIR (pero no con las revisiones menores). El último segmento del espacio de nombre, por ejemplo “1.5”, indica la versión del motor de ejecución que requiere la aplicación. Asegúrese de establecer el espacio de nombres en AIR 1.5 (
"http://ns.adobe.com/air/application/1.5") si su aplicación
utiliza alguna nueva función de AIR 1.5.
Para las aplicaciones basadas en SWF, la versión del motor de ejecución de AIR especificada en el descriptor de la aplicación determina la versión de SWF máxima que se puede cargar como contenido inicial de la aplicación. Las aplicaciones que especifican AIR 1.0 ó 1.1 sólo pueden utilizar archivos SWF9 (Flash Player 9) como contenido inicial, aunque se ejecuten utilizando el motor de ejecución de AIR 1.5. Las aplicaciones que especifican AIR 1.5 pueden usar archivos SWF9 o SWF10 (Flash Player 10) como contenido inicial. La versión de SWF determina qué versión de las API de AIR y Flash Player están disponibles. Si un archivo SWF9 se utiliza como contenido inicial de una aplicación de AIR 1.5, esa aplicación sólo tendrá acceso a las API de AIR 1.1 y Flash Player 9. Asimismo, no se aplicarán los cambios de comportamiento realizados en las API existentes en AIR 1.5 o Flash Player 10. (Los cambios importantes relacionados con la seguridad en las API constituyen una excepción en este principio y se pueden aplicar de forma retroactiva en revisiones actuales o posteriores del motor de ejecución.)
Para las aplicaciones basadas en HTML, la versión del motor de ejecución especificada en el descriptor de la aplicación determina qué versión de las API de AIR y Flash Player están disponibles en la aplicación. Los comportamientos de HTML, CSS y JavaScript siempre están determinados por la versión del Webkit utilizado en el motor de ejecución de AIR instalado, y no por el descriptor de la aplicación.
47
Si una aplicación de AIR carga contenido SWF, la versión de las API de AIR y Flash Player disponible para dicho contenido depende del modo en que se cargue el contenido. La siguiente tabla muestra cómo la versión de la API está determinada según el método de carga:
Forma de carga del contenido Forma en que la versión de la API se ve determinada
Contenido inicial, aplicación basada en SWF Versión SWF del archivo cargado
Contenido inicial, aplicación basada en HTML Espacio de nombres del descriptor de la aplicación
SWF cargado mediante contenido SWF Versión del contenido de carga
Biblioteca SWF cargada mediante contenido HTML utilizando la etiqueta <script>
SWF cargado mediante contenido HTML utilizando las API de AIR o Flash Player (por ejemplo, flash.display.Loader)
SWF cargado mediante contenido HTML utilizando etiquetas <object> o <embed> (o las API equivalentes de JavaScript)
Espacio de nombres del descriptor de la aplicación
Espacio de nombres del descriptor de la aplicación
Versión SWF del archivo cargado
Al cargar un archivo SWF de una versión distinta al contenido de carga, puede encontrarse con los siguientes problemas:
Carga de contenido SWF10 mediante SWF9 (o anterior): las referencias a las API de AIR 1.5 y Flash Player 10 en
el contenido cargado no se resolverán.
Carga de contenido SWF9 (o anterior) mediante SWF10: las API modificadas en AIR 1.5 y Flash Player 10 pueden
comportarse de un modo inesperado para el contenido cargado.
minimumPatchLevel Opcional. Utilice el atributo
minimumPatchLevel para especificar el nivel de revisión mínimo
de Adobe AIR que requiere la aplicación. Las aplicaciones de AIR suelen especificar qué versión de AIR necesitan mediante la definición del espacio de nombre en el archivo descriptor de la aplicación. El espacio de nombre cambia para cada edición principal de AIR (por ejemplo, 1.0 ó 1.5). El nombre de espacio no cambia para las revisiones.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
Las revisiones sólo contienen una serie limitada de soluciones y ninguna modificación de las API. En general las aplicaciones no indican qué revisión requieren. No obstante, una solución incluida en una revisión puede resolver un problema con una aplicación. En esta situación, una aplicación puede especificar un valor para el atributo
minimumPatchLevel para asegurar que la revisión se aplique antes de instalar la aplicación. En caso necesario, el
instalador de la aplicación de AIR indica al usuario que descargue e instale la versión o revisión que se requiera. El ejemplo siguiente muestra un elemento de la aplicación que especifica un valor para el atributo
<application xmlns="http://ns.adobe.com/air/application/1.1" minimumPatchLevel="5331">
minimumPatchLevel:

Definición de la identidad de la aplicación

Los elementos siguientes definen el ID, la versión, el nombre, el nombre de archivo, la descripción y el aviso de copyright de la aplicación:
<id>com.example.samples.TestApp</id> <version>2.0</version> <filename>TestApp</filename> <name> <text xml:lang="en">Hello AIR</text> <text xml:lang="fr">Bonjour AIR</text> <text xml:lang="es">Hola AIR</text> </name> <description>An MP3 player.</description> <copyright>Copyright (c) 2008 YourCompany, Inc.</copyright>
48
id Una cadena de identificación exclusiva de la aplicación, conocida como ID de la aplicación. El valor del atributo se limita a los siguientes caracteres:
0–9
a–z
A–Z
. (punto)
- (guión)
El valor debe contener entre 1 y 212 caracteres. Este elemento es obligatorio.
La cadena
id normalmente utiliza una jerarquía separada por puntos, en consonancia con una dirección de dominio
DNS inversa, un nombre de clase o paquete de Java™ o un identificador de tipo universal de Mac OS® X. La forma tipo DNS no es obligatoria y AIR no crea ninguna asociación entre el nombre y los dominios DNS reales.
version Especifica la información sobre la versión para la aplicación. (No tiene nada que ver con la versión del motor de ejecución). La cadena de la versión es un designador definido por la aplicación. AIR no realiza ninguna interpretación de la cadena de la versión. Por ejemplo, no supone que la versión “3.0” es más actualizada que la versión “2.0”. Ejemplos:
"1.0", ".4", "0.5", "4.9", "1.3.4a". Este elemento es obligatorio.
filename La cadena que se deberá utilizar como nombre de archivo de la aplicación (sin la extensión) al instalar ésta. El archivo de la aplicación inicia la aplicación de AIR en el motor de ejecución. Si no se facilita ningún valor para el nombre de archivo (valor de
filename) se utilizará también como nombre de la carpeta de instalación. Este
name,
elemento es obligatorio.
La propiedad
filename puede contener cualquier carácter Unicode (UTF-8) salvo los siguientes, cuyo uso en nombres
de archivo está prohibido en diversos sistemas de archivos:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
Carácter Código hexadecimal
diversos 0x00 – x1F
* x2A
" x22
: x3A
> x3C
< x3E
? x3F
\ x5C
| x7C
El valor de filename no puede terminar con un punto.
name (opcional, pero recomendado) El título que aparece en el instalador de aplicaciones de AIR.
49
Si especifica un solo nodo de texto (en lugar de varios elementos
text), el instalador de aplicaciones de AIR utiliza este
nombre, cualquiera que sea el idioma seleccionado para el sistema:
<name>Test Application</name>
El esquema del descriptor de aplicaciones de AIR 1.0 sólo permite definir un nodo de texto para el nombre (y no varios elementos de
En AIR 1.1 (o posterior) se pueden especificar varios idiomas en el elemento
text).
name. En el ejemplo siguiente se especifica
el nombre en tres idiomas (inglés, francés y español):
<name> <text xml:lang="en">Hello AIR</text> <text xml:lang="fr">Bonjour AIR</text> <text xml:lang="es">Hola AIR</text> </name>
El atributo xml:lang para cada elemento de texto especifica un código de idioma, de conformidad con lo definido en
RFC4646 (http://www.ietf.org/rfc/rfc4646.txt).
El instalador de aplicaciones de AIR utiliza el nombre que mejor se corresponde con el idioma de la interfaz de usuario del sistema operativo del usuario. Por ejemplo, tomemos una instalación en la que el elemento
name del archivo
descriptor de la aplicación incluye un valor para la configuración regional "es" (español). El instalador de aplicaciones de AIR utiliza el nombre "es" si el sistema operativo identifica "es" (español) como el idioma de la interfaz de usuario. También utiliza el nombre "es" si el idioma de la interfaz de usuario del sistema es es-ES (español de España). Sin embargo, si el idioma de la interfaz de usuario es es-ES y el archivo descriptor de la aplicación define tanto el nombre es-ES como el nombre es-UY, el instalador de aplicaciones de AIR utiliza el valor es-ES. Si la aplicación no define ningún nombre que coincide con el idioma de la interfaz de usuario del sistema, el instalador de aplicaciones de AIR utiliza el primer valor de
name que se define en el archivo descriptor de la aplicación.
Si no se especifica ningún elemento
filename como el nombre de la aplicación.
para
name, el instalador de aplicaciones de AIR muestra el nombre de archivo definido
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
El elemento name sólo define el título de la aplicación que se utiliza en el instalador de aplicaciones de AIR. El instalador de aplicaciones de AIR admite varios idiomas: chino tradicional, chino simplificado, checo, neerlandés, inglés, francés, alemán, italiano, japonés, coreano, polaco, portugués brasileño, ruso, español, sueco y turco. El instalador de aplicaciones de AIR selecciona el idioma visualizado (para texto que no sea el título y la descripción de la aplicación) con base en el idioma de la interfaz de usuario del sistema. Esta selección de idioma es independiente de la configuración del archivo descriptor de la aplicación.
50
El elemento
nameno define las configuraciones regionales disponibles para la aplicación instalada y en
funcionamiento. Para obtener más información sobre el desarrollo de aplicaciones multilingües, consulte “Localización de aplicaciones de AIR” en la página 347.
description (opcional) La descripción de la aplicación. Se muestra en el instalador de aplicaciones de AIR.
Si especifica un solo nodo de texto (en lugar de varios elementos para text), el instalador de aplicaciones de AIR utiliza este nombre, cualquiera que sea el idioma seleccionado para el sistema:
<description>This is a sample AIR application.</description>
El esquema del descriptor de aplicaciones de AIR 1.0 sólo permite definir un nodo de texto para el nombre (y no varios elementos de
En AIR 1.1 (o superior) se pueden especificar varios idiomas en el elemento
text).
description. En el ejemplo siguiente se
especifica una descripción en tres idiomas (inglés, francés y español):
<description> <text xml:lang="en">This is a example.</text> <text xml:lang="fr">C'est un exemple.</text> <text xml:lang="es">Esto es un ejemplo.</text> </description>
El atributo xml:lang para cada elemento de texto especifica un código de idioma, de conformidad con lo definido en
RFC4646 (http://www.ietf.org/rfc/rfc4646.txt).
El instalador de aplicaciones de AIR utiliza la descripción que es más similar al idioma de la interfaz de usuario del sistema operativo del usuario. Por ejemplo, tomemos una instalación en la que el elemento
description del archivo
descriptor de la aplicación incluye un valor para la configuración regional "es" (española). El instalador de aplicaciones de AIR utiliza el nombre "es" si el sistema del usuario identifica "es" (español) como el idioma de la interfaz de usuario. También utiliza el nombre "es" si el idioma de la interfaz de usuario del sistema es es-ES (español de España). Sin embargo, si el idioma de la interfaz de usuario del sistema es es-ES y el archivo descriptor de la aplicación define tanto el nombre es-ES como el nombre es-UY, el instalador de aplicaciones de AIR utiliza el valor es-ES. Si la aplicación no define ningún nombre que coincide con el idioma de la interfaz de usuario del sistema, el instalador de aplicaciones de AIR utiliza el primer valor de
description que se define en el archivo descriptor de la aplicación.
Para obtener más información sobre el desarrollo de aplicaciones multilingües, consulte “Localización de aplicaciones
de AIR” en la página 347.
copyright (opcional) La información de copyright para la aplicación de AIR. En Mac OS el aviso de copyright aparece en el cuadro de diálogo Acerca de para la aplicación instalada. En Mac OS, la información de copyright también se utiliza en el campo NSHumanReadableCopyright del archivo Info.plist para la aplicación.

Definición de la carpeta de instalación y la carpeta de menús de programa

Las carpetas de instalación y de menús de programa se definen con la siguiente configuración de propiedades:
<installFolder>Acme</installFolder> <programMenuFolder>Acme/Applications</programMenuFolder>
installFolder (opcional) Identifica el subdirectorio del directorio de instalación predeterminado.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
En Windows el subdirectorio de instalación predeterminado es el directorio Archivos de programa. En Mac OS es el directorio /Aplicaciones. En Linux, es /opt/. Por ejemplo, si la propiedad una aplicación lleva el nombre
"EjemploApl", la aplicación se instala en C:\Archivos de
installFolder está definida en "Acme" y
programa\Acme\ExampleApp en Windows, en /Aplicaciones/Acme/Example.app en MacOS y /opt/Acme/ExampleApp en Linux.
Utilice la barra diagonal (/) como carácter separador entre directorios si desea especificar un subdirectorio anidado, como en el ejemplo siguiente:
<installFolder>Acme/Power Tools</installFolder>
La propiedad installFolder puede contener cualquier carácter Unicode (UTF-8) excepto aquellos cuyo uso en nombres de archivo está prohibido en diversos sistemas de archivos (para ver la lista de excepciones, consulte la anterior propiedad
filename).
51
La propiedad se instala en un subdirectorio del directorio de instalación predeterminado basado en la propiedad
installFolder es opcional. Si no se especifica ninguna propiedad para installFolder, la aplicación
name.
programMenuFolder (Opcional) Identifica dónde deben guardarse los accesos directos a la aplicación en el menú Todos los programas del sistema operativo Windows o en el menú de aplicaciones de Linux. (En otros sistemas operativos, en la actualidad se hace caso omiso a esta opción). Las restricciones sobre el número de caracteres que se admiten en el valor de la propiedad son las mismas que para la propiedad
installFolder. No utilice una barra
diagonal (/) como último carácter de este valor.

Definición de las propiedades de la ventana inicial de la aplicación

Cuando se carga una aplicación de AIR, el motor de ejecución utiliza los valores del elemento initialWindow para crear la ventana inicial de la aplicación. Luego el motor de ejecución carga en la ventana el archivo SWF o HTML especificado en el elemento
El siguiente es un ejemplo del elemento
<initialWindow> <content>AIRTunes.swf</content> <title>AIR Tunes</title> <systemChrome>none</systemChrome> <transparent>true</transparent> <visible>true</visible> <minimizable>true</minimizable> <maximizable>true</maximizable> <resizable>true</resizable> <width>400</width> <height>600</height> <x>150</x> <y>150</y> <minSize>300 300</minSize> <maxSize>800 800</maxSize> </initialWindow>
content.
initialWindow:
Los elementos secundarios del elemento initialWindow definen las propiedades de la ventana en la que se carga el archivo de contenido raíz.
content El valor especificado para el elemento
content es la URL para el archivo principal de contenido de la
aplicación. Éste será un archivo SWF o un archivo HTML. La URL se especifica relativa a la raíz de la carpeta de instalación de la aplicación. (Al ejecutar una aplicación de AIR con ADL, la URL se indica relativa a la carpeta que contiene el archivo descriptor de la aplicación. Se puede utilizar el parámetro
root-dir de ADL para especificar otro
directorio raíz).
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
Nota: al tratarse como una URL el valor del elemento content, los caracteres del nombre del archivo de contenido deben codificarse como URL de acuerdo con las reglas definidas en RFC 1738. Los caracteres de espacio, por ejemplo, deben codificarse como
%20.
title (Opcional) El título de la ventana.
52
systemChrome (Opcional) Si este atributo se define en proporcionado por el sistema operativo. Si lo define en
standard, se mostrará el fondo cromático estándar
none, no se mostrará ningún fondo cromático del sistema. La
opción de fondo cromático no puede modificarse durante el tiempo de ejecución.
transparent (opcional) Defínalo en
"true" si desea que la ventana de la aplicación admita la mezcla alfa. Una ventana
con transparencia puede dibujarse más lentamente y necesitar más memoria. La opción de transparencia no puede modificarse durante el tiempo de ejecución.
Importante: Sólo se puede definir
visible (opcional) Defínalo en predeterminado es
false.
transparent en true si systemChrometiene el valor.
true si desea que la ventana principal quede visible en cuanto se haya creado. El valor
Puede convenir dejar la ventana principal oculta al principio para que no se muestren los ajustes de la posición y el tamaño de la ventana y la disposición del contenido. Se podrá mostrar después la ventana llamando al método
activate() de la ventana o cambiando la propiedad visible a true. Para obtener más información, consulte
Trabajo con ventanas nativas” en la página 60.
x, y, width, height (opcionales) Límites iniciales de la ventana principal de la aplicación. Si no se definen estos valores, el tamaño de la ventana quedará definido por las opciones del archivo SWF raíz o, en el caso de HTML, por el sistema operativo.
minSize, maxSize (opcionales) Tamaños mínimo y máximo de la ventana. Si no se definen estos valores, los determinará el sistema operativo.
minimizable, maximizable, resizable (opcionales) Especifican si se puede minimizar, maximizar y redimensionar la ventana. Estas opciones tienen el valor predeterminado
true.
Nota: en los sistemas operativos como Mac OS X en los cuales la maximización de las ventanas es una operación de redimensionamiento, para que la ventana no cambie de tamaño, tanto "maximizable" como "resizable" deben definirse
false.
en

Especificación de archivos de iconos

La propiedad icon especifica un archivo de icono (o varios) a utilizar para la aplicación. Los iconos son opcionales. Si no se define la propiedad
La ruta se indica relativa al directorio raíz de la aplicación. Los archivos de iconos deben tener el formato PNG. Se pueden especificar todos los tamaños de icono siguientes:
<icon> <image16x16>icons/smallIcon.png</image16x16> <image32x32>icons/mediumIcon.png</image32x32> <image48x48>icons/bigIcon.png</image48x48> <image128x128>icons/biggestIcon.png</image128x128> </icon>
Si hay un elemento para un tamaño determinado, la imagen que contiene el archivo debe ser exactamente del tamaño especificado. Si no se proporcionan todos los tamaños, el sistema operativo ajusta el tamaño más parecido para un uso determinado del icono.
icon, el sistema operativo muestra un icono predeterminado.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
Nota: los iconos especificados no se añaden automáticamente al paquete de AIR. Los archivos de iconos deben estar incluidos en sus lugares relativos correctos cuando se empaqueta de la aplicación.
Para obtener el mejor resultado posible, proporcione una imagen para cada uno de los tamaños disponibles. Asegúrese también de que los iconos sean de buen aspecto tanto en el modo de color de 16 bits como en el de 32 bits.

Interfaz de usuario personalizada para actualizaciones

AIR instala y actualiza las aplicaciones utilizando los cuadros de diálogo de instalación predeterminados. No obstante, puede proporcionar su propia interfaz para actualizar una aplicación. Para indicar que la aplicación debe encargarse del proceso de actualización, defina el elemento
<customUpdateUI>true</customUpdateUI>
Cuando la versión instalada de la aplicación tiene el elemento customUpdateUI definido en true y el usuario hace doble clic en el archivo de AIR para una nueva versión o instala una actualización de la aplicación utilizando la función de instalación integrada, el motor de ejecución abre la versión instalada de la aplicación en lugar del instalador de aplicaciones de AIR predeterminado. La lógica de la aplicación determina entonces cómo continuar con la operación de actualización. (Para que se lleve a cabo una actualización, el ID de la aplicación y el ID del editor que figuran en el archivo de AIR deben coincidir con los de la aplicación instalada).
customUpdateUI en true:
53
Nota: el mecanismo
customUpdateUI sólo entra en juego si la aplicación ya está instalada y el usuario hace doble clic
en el archivo de instalación de AIR que contiene una actualización, o si instala una actualización de la aplicación utilizando la función de instalación integrada. Puede descargar una actualización e iniciarla a través de la lógica de su propia aplicación, visualizando la interfaz de usuario personalizada según convenga, esté o no definido en
true.
customUpdateUI
Para obtener más información, consulte “Actualización de aplicaciones de AIR” en la página 331.

Inicio de la aplicación desde el navegador

Si se especifica la siguiente opción, se podrá iniciar la aplicación de AIR instalada utilizando la función de invocación desde el navegador (el usuario selecciona un vínculo en una página en el navegador Web):
<allowBrowserInvocation>true</allowBrowserInvocation>
El valor predeterminado es false.
Si este valor se define en
true, asegúrese de tener en cuenta las posibles consecuencias para la seguridad, descritas en
Invocación desde el navegador” en la página 295.
Para obtener más información, consulte “Instalación y ejecución de aplicaciones de AIR desde una página Web” en la página 315.

Declaración de asociaciones con tipos de archivos

El elemento fileTypes permite declarar los tipos de archivos con que se puede asociar una aplicación de AIR. Cuando se instala una aplicación de AIR, los tipos de archivos declarados se registran en el sistema operativo y, si estos tipos de archivos aún no se encuentran asociados con ninguna otra aplicación, se asocian con la aplicación de AIR. Para suprimir una asociación existente entre un tipo de archivo y otra aplicación, utilice el método en tiempo de ejecución
NativeApplication.setAsDefaultApplication() (preferentemente con el permiso del usuario).
Nota: los métodos del motor de ejecución sólo pueden manejar asociaciones para los tipos de archivos declarados en el descriptor de la aplicación.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Configuración de las propiedades de una aplicación de AIR
<fileTypes> <fileType> <name>adobe.VideoFile</name> <extension>avf</extension> <description>Adobe Video File</description> <contentType>application/vnd.adobe.video-file</contentType> <icon> <image16x16>icons/AIRApp_16.png</image16x16> <image32x32>icons/AIRApp_32.png</image32x32> <image48x48>icons/AIRApp_48.png</image48x48> <image128x128>icons/AIRApp_128.png</image128x128> </icon> </fileType> </fileTypes>
El elemento fileTypes es opcional. Puede contener varios elementos fileType.
54
Los elementos
name y extension son obligatorios para cada declaración de fileType que se incluya. Se puede utilizar
el mismo nombre con varias extensiones. La extensión identifica el tipo de archivo. (Cabe observar que la extensión se especifica sin el punto que la precede). El elemento usuario del sistema operativo.
contentType es necesario en AIR 1.5 (era opcional en AIR 1.0 y 1.1). La propiedad
description es opcional; lo presenta al usuario la interfaz de
ayuda al sistema operativo a localizar la mejor aplicación para abrir un archivo en determinadas circunstancias. El valor debe ser el tipo MIME del contenido del archivo. Se debe tener en cuenta que el valor se omite en Linux si el tipo de archivo ya se ha registrado y dispone de un tipo MIME asignado.
Se pueden especificar iconos para la extensión de archivo utilizando el mismo formato que el elemento "icon" de la aplicación. Los archivos de iconos también deben incluirse en el archivo de instalación de AIR (no se colocan automáticamente en el paquete).
Si hay un tipo de archivo asociado con una aplicación de AIR, cada vez que un usuario abra un archivo de ese tipo se invocará la aplicación. Si la aplicación ya está funcionando, AIR distribuye el objeto InvokeEvent a la instancia que se esté ejecutando. En caso contrario, AIR iniciará primero la aplicación. En ambos casos la ruta al archivo puede recuperarse del objeto InvokeEvent distribuido por el objeto NativeApplication. Puede utilizarse esta ruta para abrir el archivo.
Para obtener más información, consulte “Gestión de asociaciones con archivos” en la página 301 y “Captura de
argumentos de la línea de comandos” en la página 293.

Capítulo 9: Funcionalidad específica de Adobe AIR

En este capítulo se presenta información general sobre la funcionalidad de Adobe® AIR™ que no está disponible para el contenido SWF que se ejecuta en Adobe® Flash® Player.

Clases específicas de AIR

Las siguientes clases del motor de ejecución son específicas de Adobe AIR. No están disponibles para el contenido SWF que se ejecute en el navegador:
Clase Paquete
ApplicationUpdater air.update
ApplicationUpdaterUI air.update
55
BrowserInvokeEvent flash.events
Clipboard flash.desktop
ClipboardFormats flash.desktop
ClipboardTransferMode flash.desktop
CompressionAlgorithm flash.utils
DockIcon flash.desktop
DownloadErrorEvent air.update.events
DRMAuthenticateEvent flash.events
DRMErrorEvent flash.events
DRMStatusEvent flash.events
EncryptedLocalStore flash.data
File flash.filesystem
FileListEvent flash.events
FileMode flash.filesystem
FileStream flash.filesystem
FocusDirection flash.display
HTMLHistoryItem flash.html
HTMLHost flash.html
HTMLLoader flash.html
HTMLPDFCapability flash.html
HTMLUncaughtScriptExceptionEvent flash.events
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Clase Paquete
HTMLWindowCreateOptions flash.html
Icon flash.desktop
InteractiveIcon flash.desktop
InvokeEvent flash.events
NativeApplication flash.desktop
NativeDragActions flash.desktop
NativeDragEvent flash.events
NativeDragManager flash.desktop
NativeDragOptions flash.desktop
NativeMenu flash.display
NativeMenuItem flash.display
NativeWindow flash.display
NativeWindowBoundsEvent flash.events
56
Funcionalidad específica de Adobe AIR
NativeWindowDisplayState flash.display
NativeWindowDisplayStateEvent flash.events
NativeWindowInitOptions flash.display
NativeWindowResize flash.display
NativeWindowSystemChrome flash.display
NativeWindowType flash.display
NotificationType flash.desktop
OutputProgressEvent flash.events
RevocationCheckSettings flash.security
Screen flash.display
ScreenMouseEvent flash.events
SignatureStatus flash.security
SignerTrustSettings flash.security
SQLCollationType flash.data
SQLColumnNameStyle flash.data
SQLColumnSchema flash.data
SQLConnection flash.data
SQLError flash.errors
SQLErrorEvent flash.events
SQLErrorOperation flash.errors
SQLEvent flash.events
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Clase Paquete
SQLIndexSchema flash.data
SQLResult flash.data
SQLSchema flash.data
SQLSchemaResult flash.data
SQLStatement flash.data
SQLTableSchema flash.data
SQLTransactionLockType flash.data
SQLTriggerSchema flash.data
SQLUpdateEvent flash.events
SQLViewSchema flash.data
StatusFileUpdateErrorEvent air.update.events
StatusFileUpdateEvent air.update.events
StatusUpdateErrorEvent air.update.events
57
Funcionalidad específica de Adobe AIR
StatusUpdateEvent air.update.events
SystemTrayIcon flash.desktop
UpdateEvent air.update.events
Updater flash.desktop
URLRequestDefaults flash.net
XMLSignatureValidator flash.utils
Además, el paquete flash.security incluye la interfaz IURIDereferencer, que es específica de AIR.

Clases del motor de ejecución con funcionalidad específica de AIR

Las siguientes clases están disponibles para el contenido SWF que se ejecuta en el navegador, pero AIR ofrece propiedades o métodos adicionales:
Clase Método o propiedad
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Funcionalidad específica de Adobe AIR
58
Capabilities
Event DISPLAYING
FileReference
HTTPStatusEvent HTTP_RESPONSE_STATUS
KeyboardEvent commandKey
LoaderContext allowLoadBytesCodeExecution
LoaderInfo parentSandboxBridge
languages
EXITING
HTML_BOUNDS_CHANGE
HTML_DOM_INITIALIZE
HTML_RENDER
LOCATION_CHANGE
NETWORK_CHANGE
USER_IDLE
USER_PRESENT
uploadUnencoded()
responseURL
responseHeaders
controlKey
childSandboxBridge
NetStream resetDRMVouchers()
setDRMAuthenticationCredentials()
URLRequest
URLStream Evento httpResponseStatus
Stage nativeWindow
Security APPLICATION
followRedirects
manageCookies
shouldAuthenticate
shouldCacheResponse
userAgent
userCache
setLoginCredentials()
La mayoría de estos nuevos métodos y propiedades sólo están disponibles para contenido que se encuentra en el entorno limitado de seguridad de la aplicación de AIR. No obstante, los nuevos integrantes de las clases URLRequest también están disponibles para el contenido que se ejecuta en otros entornos limitados.
Los métodos
algorithm, que permite seleccionar entre la compresión deflate y zlib. Este parámetro está disponible únicamente en
ByteArray.compress() y ByteArray.uncompress() incluyen cada uno un nuevo parámetro,
el contenido que se ejecuta en AIR.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Funcionalidad específica de Adobe AIR

Clases del marco de supervisión del servicio

El paquete air.net contiene clases para la detección a través de la red. Este paquete está disponible solamente para contenido que se ejecuta en Adobe AIR. Viene incluido en el archivo ServiceMonitor.swc.
El paquete incluye las siguientes clases:
ServiceMonitor
SocketMonitor
URLMonitor
59

Capítulo 10: Trabajo con ventanas nativas

Puede utilizar las clases proporcionadas por la API de manejo de ventanas nativas de Adobe® AIR® para crear y gestionar ventanas de escritorio.

Información adicional sobre ventanas nativas

Dispone de información adicional sobre la API de manejo de ventanas nativas y el proceso de trabajo con ellas en las siguientes referencias:
Inicios rápidos (Centro de desarrollo de Adobe AIR) (en inglés)
Interacción con una ventana
Personalización del aspecto de una ventana nativa
Creación de ventanas superpuestas
Control del orden de visualización de las ventanas
Creación de ventanas no rectangulares de tamaño modificable
60
Referencia del lenguaje
NativeWindow
NativeWindowInitOptions
Artículos y ejemplos del Centro de desarrollo de Adobe
Centro de desarrollo de Adobe AIR para Flash (en inglés); busque "AIR windows".

Aspectos básicos de ventanas de AIR

AIR proporciona una API de ventana fácil de usar y válida para todas las plataformas con la que es posible crear ventanas nativas de sistema operativo utilizando Flash®, Flex™ y técnicas de programación HTML.
Con AIR, las posibilidades de desarrollar el aspecto de su aplicación son enormes. Las ventanas que se crean pueden presentar un aspecto similar a una aplicación de escritorio estándar, coincidiendo con el estilo de Apple cuando se ejecutan en Mac, ajustándose a las convenciones de Microsoft cuando se ejecutan en Windows y en armonía con el administrador de ventanas de Linux; todo ello sin incluir ninguna línea de código de plataforma específica. También puede utilizar el fondo cromático de aspecto configurable de la arquitectura de Flex para establecer su propio estilo sin importar dónde se ejecute la aplicación. Incluso puede dibujar su propio fondo cromático de ventana con ilustraciones vectoriales o de mapas de bits con compatibilidad total de transparencia y valores alfa que se fundan con el escritorio. ¿Está cansado de tanta ventana rectangular? Dibuje una redondeada.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas

Ventanas de AIR

AIR admite tres API diferentes para trabajar con ventanas:
La clase NativeWindow orientada a ActionScript proporciona la API de gestión de ventanas de nivel más bajo.
Utilice NativeWindows en ActionScript y aplicaciones creadas con Flash CS. Considere la ampliación de la clase NativeWindow para que se especialice en las ventanas utilizadas en la aplicación.
Las clases del marco de Flex, mx:WindowedApplication y mx:Window, proporcionan un “envolvente” de Flex para
la clase NativeWindow. El componente WindowedApplication sustituye al componente Application cuando se crea una aplicación de AIR con Flex y siempre se debe usar como ventana inicial en la aplicación de Flex.
En el entorno HTML, se puede usar la clase Window de JavaScript, tal y como se haría en una aplicación Web
basada en navegador. Las llamadas a los métodos Window de JavaScript se reenvían al objeto de ventana nativa subyacente.
Ventanas de ActionScript
Al crear ventanas con la clase NativeWindow, puede utilizar el escenario y la lista de visualización de Flash Player directamente. Para añadir un objeto visual a una ventana NativeWindow, añada el objeto a la lista de visualización del escenario de la ventana o a otro contenedor de objetos de visualización del escenario.
Ventanas de la arquitectura de Flex
La arquitectura de Flex define sus propios componentes que agrupan la API NativeWindow. Estos componentes (mx:WindowedApplication y mx:Window) no se pueden utilizar fuera de la arquitectura, por lo que tampoco se pueden utilizar en aplicaciones de AIR desarrolladas con Flash CS.
61
Ventanas HTML
Cuando se crean ventanas HTML, se utiliza HTML, CSS y JavaScript para visualizar el contenido. Para añadir un objeto visual a una ventana HTML, añada el contenido al DOM HTML. Las ventanas HTML son una categoría especial de NativeWindow. El host de AIR define una propiedad
nativeWindow en las ventanas HTML que proporciona
acceso a la instancia subyacente de NativeWindow. Puede utilizar esta propiedad para acceder a las propiedades, métodos y eventos de NativeWindow que se describen en esta sección.
Nota: el objeto Window de JavaScript también cuenta con métodos para crear scripts de la ventana que los contiene, como por ejemplo,
moveTo() y close(). Si dispone de varios métodos al mismo tiempo, puede utilizar el que más le
convenga.
Ventana inicial de la aplicación
AIR crea para el usuario la primera ventana de la aplicación automáticamente. AIR define las propiedades y el contenido de la ventana a partir de los parámetros especificados en el elemento
initialWindow del archivo descriptor
de la aplicación.
Si el contenido raíz es un archivo SWF, AIR crea una instancia de NativeWindow, carga el archivo SWF y lo añade al escenario de la ventana. Si el contenido raíz es un archivo HTML, AIR crea una ventana HTML y carga el contenido HTML.
Para obtener más información sobre las propiedades de ventana especificadas en el descriptor de la aplicación, consulte “Estructura del archivo descriptor de la aplicación” en la página 45.

Clases de ventanas nativas

La API de gestión de ventanas nativas contiene las siguientes clases:
Paquete Clases
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
62
flash.display
NativeWindow
NativeWindowInitOptions
NativeWindowDisplayState
NativeWindowResize
NativeWindowSystemChrome
NativeWindowType
Las constantes de cadena de la ventana se definen en las siguientes clases:
NativeWindowDisplayState
NativeWindowResize
NativeWindowSystemChrome
NativeWindowType
flash.events
NativeWindowBoundsEvent
NativeWindowDisplayStateEvent

Flujo de eventos de ventanas nativas

Las ventanas nativas distribuyen eventos para notificar a los componentes pertinentes sobre cambios importantes que se han producido o pueden producirse. Muchos eventos relacionados con ventanas se distribuyen por parejas. El primer evento advierte sobre un cambio que va a producirse. El segundo evento anuncia que el cambio se ha realizado. Puede cancelar un evento de advertencia, pero no uno de notificación. En la siguiente secuencia se muestra el flujo de eventos que se producen cuando un usuario hace clic en el botón Maximizar de una ventana:
1 El objeto NativeWindow distribuye un evento displayStateChanging.
2 Si ningún detector registrado lo cancela, la ventana se maximiza.
3 El objeto NativeWindow distribuye un evento displayStateChange.
Además, el objeto NativeWindow también distribuye eventos para los cambios relacionados con el tamaño y la posición de la ventana. La ventana no distribuye eventos de advertencia para estos cambios relacionados. Los eventos relacionados son:
a Un evento move se distribuye si la esquina superior izquierda de la ventana se mueve por maximización.
b Un evento resize se distribuye si el tamaño de la ventana cambia por maximización.
Un objeto NativeWindow distribuye una secuencia similar de eventos cuando una ventana se minimiza, se restaura, se cierra, se mueve y se cambia de tamaño.
Los eventos de advertencia sólo se distribuyen si se inicia un cambio del fondo cromático de la ventana o por cualquier otro mecanismo controlado por el sistema operativo. Cuando se llama a un método de ventana para que cambie el tamaño, la posición o el estado de visualización de la ventana, ésta sólo distribuye un evento para anunciar el cambio. Si lo desea, puede distribuir un evento de advertencia con el método
dispatchEvent() de la ventana y,
después, ver si el evento de advertencia se ha cancelado antes de realizar el cambio.
Para obtener más información sobre las clases, métodos, propiedades y eventos de API de ventana, consulte el manual Referencia del lenguaje y componentes ActionScript 3.0 (http://www.adobe.com/go/learn_flash_aslr_es).
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
Para obtener información general sobre la lista de visualización de Flash, consulte la sección “Programación de visualización” del manual Programación con Adobe ActionScript 3.0 (http://www.adobe.com/go/learn_fl_cs4_programmingAS3_es).

Propiedades que controlan el estilo y el comportamiento de una ventana nativa

Las siguientes propiedades controlan el aspecto y el comportamiento básicos de una ventana:
type
systemChrome
transparent
Al crear una ventana, estas propiedades se establecen en el objeto NativeWindowInitOptions transferido al constructor de la ventana. AIR lee las propiedades de la ventana inicial de la aplicación desde el descriptor de la aplicación. (Salvo la propiedad
normal.) Las propiedades no se pueden modificar una vez creada la ventana.
en
type, que no se puede establecer en el descriptor de la aplicación y siempre se define
63
Algunos ajustes de estas propiedades son incompatibles entre sí:
standard si transparent es true o si type es lightweight.
systemChrome no se puede establecer como
Tipos de ventanas
Los tipos de ventanas de AIR combinan atributos de fondo cromático y visibilidad del sistema operativo nativo para crear tres tipos de ventanas funcionales. Puede utilizar las constantes definidas en la clase NativeWindowType para hacer referencia a los nombres de los tipos en el código. AIR proporciona los siguientes tipos de ventanas:
Tipo Descripción
Normal Una ventana normal. La ventanas normales utilizan el fondo cromático de pantalla completa y se muestran en
Utilidades Una paleta de herramientas. Las ventanas de utilidades utilizan una versión más ligera del fondo cromático del
Ligeras Las ventanas ligeras no tienen fondo cromático y no aparecen en la barra de tareas de Windows ni en el menú
la barra de tareas de Windows o en el menú Ventana de Mac OS X.
sistema y no se muestran en la barra de tareas de Windows ni en el menú Ventana de Mac OS X.
Ventana de Mac OS X. Además, las ventanas ligeras no disponen de menú Sistema (Alt+Barra espaciadora) en Windows. El uso de ventanas ligeras está recomendado para mensajes emergentes de notificación o controles, como cuadros emergentes áreas de visualización temporal. Si utiliza el
systemChrome debe establecerse como none.
type en ventanas ligeras,
Fondo cromático de una ventana
El fondo cromático de una ventana es el conjunto de controles que permiten a los usuarios manipular la ventana en un entorno de escritorio. Los elementos del fondo cromático son la barra de título, los botones de la barra de título, los bordes y los selectores de cambio de tamaño.
Fondo cromático del sistema
Puede establecer la propiedad
systemChrome como standard o como none. Seleccione el valor standard de fondo
cromático para darle a la ventana el conjunto de controles creados e ideados por el sistema operativo del usuario. Seleccione
none para proporcionar su propio fondo cromático a la ventana. Utilice las constantes definidas en la clase
NativeWindowSystemChrome para hacer referencia a los parámetros del fondo cromático del sistema en el código.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
La gestión del fondo cromático del sistema corre a cargo del propio sistema. La aplicación no tiene acceso directo a los controles, pero puede reaccionar ante la distribución de eventos cuando se utilicen los controles. Si se utiliza el fondo cromático estándar para una ventana, la propiedad debe ser
normal o utility.
transparent debe establecerse como false y la propiedad type
Fondo cromático personalizado
Cuando se crea una ventana sin fondo cromático del sistema, es preciso añadir controles de fondo cromático propios para controlar la interacción entre el usuario y la ventana. También, si lo desea, puede crear ventanas no rectangulares y transparentes.
Transparencia de la ventana
Para permitir la mezcla alfa en una ventana de escritorio o en cualquier otra, establezca la propiedad transparent de la ventana como modificarla.
Una ventana transparente no tiene fondo predeterminado. Cualquier área de la ventana que no contenga objetos dibujados por la aplicación es invisible. Si un objeto visualizado tiene un valor alfa menor que uno, cualquier elemento debajo del objeto será transparente, incluidos los demás objetos de visualización de la misma ventana, de otras ventanas y del escritorio. La representación de zonas grandes de mezcla alfa lleva su tiempo, por lo que el efecto debe utilizarse con precaución.
true. Debe establecer la propiedad transparent antes de crear la ventana y no es posible
64
Las ventanas transparentes resultan útiles cuando se quieren crear aplicaciones con bordes de forma irregular, aplicaciones que “desaparecen” o aplicaciones invisibles.
Importante: En Linux, los eventos de ratón no pasan por píxeles completamente transparentes. Se debe evitar la creación de ventanas con áreas grandes y completamente transparentes, ya que se puede bloquear de forma invisible el acceso del usuario a otras ventanas o elementos en su escritorio. En Mac OS X y Windows, los eventos de ratón no pasan por píxeles completamente transparentes.
La transparencia no se puede aplicar a ventanas con fondo cromático del sistema. Además, el contenido SWF y PDF del HTML no se visualiza en las ventanas transparentes. Para obtener más información, consulte “Consideraciones al
cargar el contenido SWF o PDF en una página HTML” en la página 260.
En algunos sistemas operativos, no se admite la transparencia debido a la configuración concreta del hardware o del software, o como consecuencia de las opciones de visualización del usuario. Si no se admite transparencia, la aplicación se compone con un fondo negro. En estos casos, cualquier área transparente de la aplicación se visualiza en negro opaco.
La propiedad
false, por ejemplo, puede mostrar un diálogo de advertencia al usuario, o una interfaz rectangular, básica y no
es
NativeWindow.supportsTransparency indica si la ventana puede ser transparente. Si esta propiedad
transparente. Tenga en cuenta que la transparencia se admite siempre en los sistemas operativos Mac y Windows. La compatibilidad con los sistemas operativos Linux requiere un administrador de ventanas de composición, pero aunque este administrador esté activo, la transparencia puede no estar disponible debido a las opciones de visualización del usuario o a la configuración de hardware.
Transparencia en una ventana de aplicación HTML
De forma predeterminada, el fondo del contenido HTML se visualiza en las ventanas HTML y en los objetos HTMLLoader como opaco, incluso si la ventana que lo contiene es transparente. Para desactivar el fondo predeterminado para el contenido HTML, establezca la propiedad siguiente ejemplo crea un objeto HTMLLoader y desactiva el fondo predeterminado:
paintsDefaultBackground como false. El
var html:HTMLLoader = new HTMLLoader(); html.paintsDefaultBackground = false;
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
Este ejemplo utiliza JavaScript para desactivar el fondo predeterminado de una ventana HTML:
window.htmlLoader.paintsDefaultBackground = false;
Si un elemento del documento HTML establece un color de fondo, el fondo de dicho elemento no es transparente. No está permitido establecer un valor de transparencia (u opacidad) parcial. Sin embargo, se puede utilizar un gráfico transparente en formato PNG como fondo de página o de elemento de página para conseguir un efecto visual parecido.

Catálogo de ventana visual

En la siguiente tabla se resumen los efectos visuales de las distintas combinaciones de parámetros de propiedades de ventanas en los sistemas operativos Mac OS X, Windows y Linux:
65
Parámetros de ventana Mac OS X Microsoft Windows Linux
Type: normal
SystemChrome: estándar
Transparent: false
Type: utility
SystemChrome: estándar
Transparent: false
*
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
66
Parámetros de ventana Mac OS X Microsoft Windows Linux
Type: cualquiera
SystemChrome: ninguno
Transparent: false
Type: cualquiera
SystemChrome: ninguno
Transparent: true
mxWindowedApplication o mx:Window
Type: cualquiera
SystemChrome: ninguno
Transparent: true
*
*
Ubuntu con el administrador de ventanas Compiz
Nota: los siguientes elementos del fondo cromático del sistema no se admiten en AIR: la barra de herramientas de Mac OS X, el icono proxy de Mac OS X, los iconos de barra de título de Windows y otros fondos cromáticos alternativos.

Creación de ventanas

AIR crea automáticamente la primera ventana de la aplicación, pero el usuario puede crear más ventanas adicionales si lo necesita. Para crear una ventana nativa, utilice el método NativeWindow. Para crear una ventana HTML, utilice el método de JavaScript.

Especificación de propiedades de inicialización de una ventana

Las propiedades de inicialización de una ventana no se pueden modificar una vez creada la ventana de escritorio. Estas propiedades invariables y sus valores predeterminados son:
createRootWindow() de HTMLLoader o, desde un documento HTML, llame al método window.open()
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Propiedad Valor predeterminado
systemChrome standard
type normal
transparent false
maximizable true
minimizable true
resizable true
Trabajo con ventanas nativas
Establezca las propiedades de la ventana inicial creada por AIR en el archivo descriptor de la aplicación. La ventana principal de una aplicación de AIR siempre es de tipo normal. (Se pueden especificar propiedades adicionales de la ventana en el archivo descriptor, por ejemplo,
visible, width y height; estas propiedades se pueden modificar en
cualquier momento.)
Puede establecer las propiedades de otras ventanas nativas y HTML creadas por la aplicación mediante la clase NativeWindowInitOptions. Cuando se crea una ventana, se debe transferir un objeto NativeWindowInitOptions especificando las propiedades de la ventana en la función constructora NativeWindow o en el método
createRootWindow() de HTMLLoader.
67
El siguiente código crea un objeto NativeWindowInitOptions para una ventana de utilidades:
var options:NativeWindowInitOptions = new NativeWindowInitOptions(); options.systemChrome = NativeWindowSystemChrome.STANDARD; options.type = NativeWindowType.UTILITY options.transparent = false; options.resizable = false; options.maximizable = false;
No está permitido establecer systemChrome como standard si transparent es true o type es lightweight.
Nota: no es posible definir las propiedades de inicialización de una ventana creada con la función
window.open() de
JavaScript. Sin embargo, sí se puede anular el modo en que se crean estas ventanas implementando su propia clase HTMLHost. Consulte “Gestión de llamadas JavaScript a window.open()” en la página 269 para obtener más información.

Creación de la ventana inicial de la aplicación

AIR crea la ventana inicial de la aplicación a partir de las propiedades especificadas en el descriptor de la aplicación y carga el archivo al que se hace referencia en el elemento del contenido. El elemento de contenido debe hacer referencia a un archivo SWF o HTML.
La ventana inicial puede ser la ventana principal de la aplicación o simplemente una o varias ventanas adicionales que se abren. No tienen por qué ser visibles.
La herramienta de edición de Flash crea automáticamente el archivo SWF y añade la referencia adecuada al descriptor de la aplicación cuando se prueba o se publica un proyecto de AIR. La línea de tiempo principal sirve de punto de entrada para la aplicación.
Cuando se inicia la aplicación, AIR crea una ventana y carga el archivo SWF de la aplicación. Para controlar la ventana de escritorio con ActionScript, utilice la propiedad
nativeWindow del objeto Stage para obtener una referencia al
objeto NativeWindow. Posteriormente, puede establecer las propiedades de la ventana y empezar a llamar a los métodos.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
El siguiente ejemplo activa la ventana principal maximizada (desde el primer fotograma de un archivo FLA de Flash):
import flash.display.NativeWindow;
var mainWindow:NativeWindow = this.stage.nativeWindow; mainWindow.maximize(); mainWindow.activate();

Creación de una ventana nativa

Para crear una ventana NativeWindow, transfiera un objeto NativeWindowInitOptions al constructor NativeWindow:
var options:NativeWindowInitOptions = new NativeWindowInitOptions(); options.systemChrome = NativeWindowSystemChrome.STANDARD; options.transparent = false; var newWindow:NativeWindow = new NativeWindow(options);
La ventana no se muestra hasta que se establece la propiedad visible como true o se llama al método activate().
Una vez creada la ventana, puede inicializar sus propiedades y cargar contenido utilizando la propiedad de escenario y técnicas de lista de visualización de Flash.
68
En casi todos los casos, debe establecer la propiedad
noScale (utilice la constante StageScaleMode.NO_SCALE). Los modos de escala de Flash están diseñados para
scaleMode del escenario de una nueva ventana nativa como
situaciones en las que el autor de la aplicación desconoce la relación de aspecto del espacio de visualización de la aplicación. Los modos de escala permiten al autor escoger la opción menos arriesgada: recortar el contenido, estrecharlo o apretarlo, o incluso llenarlo con un espacio vacío. Como el desarrollador controla el espacio de visualización en AIR (el marco de la ventana), es posible cambiar el tamaño de la ventana para que se ajuste al contenido, o cambiar el tamaño sin aplicar ningún ajuste.
Nota: para determinar los tamaños máximo y mínimo de ventana admitidos en el sistema operativo actual, utilice las siguientes propiedades estáticas de NativeWindow:
var maxOSSize:Point = NativeWindow.systemMaxSize; var minOSSize:Point = NativeWindow.systemMinSize;

Creación de una ventana HTML

Para crear una ventana HTML, puede llamar al método Window.open() de JavaScript, o llamar al método
createRootWindow() de la clase HTMLLoader de AIR.
El contenido HTML de cualquier entorno limitado de seguridad puede utilizar el método JavaScript. Si el contenido se ejecuta fuera del entorno limitado de la aplicación, se puede llamar al método sólo como respuesta a la interacción del usuario, por ejemplo, cuando hace clic con el ratón o cuando pulsa una tecla. Cuando se llama a
open(), se crea una ventana con fondo cromático del sistema para visualizar el contenido en la
dirección URL especificada. Por ejemplo:
newWindow = window.open("xmpl.html", "logWindow", "height=600, width=400, top=10, left=10");
Window.open() estándar de
open()
Nota: puede ampliar la clase HTMLHost en ActionScript para personalizar la ventana creada con la función
window.open() de JavaScript. Consulte “Ampliación de la clase HTMLHost” en la página 264.
El contenido del entorno limitado de seguridad de la aplicación tiene acceso al método más potente para la creación de ventanas:
HTMLLoader.createRootWindow(). Con este método, es posible especificar todas las opciones de
creación de una ventana nueva. El siguiente código JavaScript, por ejemplo, crea una ventana ligera sin fondo cromático del sistema de 300x400 píxeles de tamaño:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
var options = new air.NativeWindowInitOptions(); options.systemChrome = "none"; options.type = "lightweight";
var windowBounds = new air.Rectangle(200,250,300,400); newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds); newHTMLLoader.load(new air.URLRequest("xmpl.html"));
Trabajo con ventanas nativas
Nota: si el contenido cargado por una nueva ventana se encuentra fuera del entorno limitado de seguridad de la aplicación, el objeto window no tiene las siguientes propiedades de AIR:
runtime, nativeWindow o htmlLoader.
69
Las ventanas creadas con el método propiedades
parent y opener del objeto Window de JavaScript son null. La ventana que se abre puede acceder al
createRootWindow() son independientes de la ventana que se abre. Las
objeto Window de la nueva ventana utilizando la referencia a HTMLLoader devuelta por la función
createRootWindow(). En el contexto del ejemplo anterior, la sentencia newHTMLLoader.window haría referencia al
objeto Window de JavaScript de la ventana creada.
Nota: se puede llamar a la función
createRootWindow() desde JavaScript y ActionScript.

Cómo añadir contenido a una ventana

La forma en que se añade contenido a las ventanas de AIR depende del tipo de ventana. Puede crear un clip de película y utilizar la línea de tiempo para controlar el estado de la aplicación. Con HTML, puede declarar definiciones del contenido básico de la ventana. Puede incorporar recursos en el archivo SWF de la aplicación o cargarlos desde distintos archivos de aplicación. El contenido de Flash y HTML se puede crear sobre la marcha y añadirlo dinámicamente a una ventana.
Cuando se carga contenido SWF o HTML que contiene JavaScript, se debe tener en cuenta el modelo de seguridad de AIR. Cualquier contenido del entorno limitado de seguridad de la aplicación, es decir, el contenido instalado y cargado con el esquema de URL app: de la aplicación, tiene privilegios completos para acceder a todas las API de AIR. Cualquier contenido cargado desde fuera de este entorno limitado no podrá acceder a las API de AIR. El contenido de JavaScript situado alojado fuera del entorno limitado de la aplicación no puede utilizar las propiedades
nativeWindow o htmlLoader del objeto Window de JavaScript.
Para que el uso de scripts sea seguro, puede utilizar el puente de entorno limitado para facilitar una interfaz limitada entre el contenido de la aplicación y el que no lo es. En contenido HTML, también puede asignar imágenes de la aplicación al entorno limitado ajeno a a la aplicación para que el código de dicha página pueda utilizar el contenido externo de los scripts. Consulte “Seguridad en AIR” en la página 24.
runtime,
Carga de un archivo SWF o una imagen
Puede cargar archivos SWF de Flash o imágenes en la lista de visualización de una ventana nativa utilizando la clase
flash.display.Loader:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import flash.display.Loader;
public class LoadedSWF extends Sprite { public function LoadedSWF(){ var loader:Loader = new Loader(); loader.load(new URLRequest("visual.swf")); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadFlash); }
private function loadFlash(event:Event):void{ addChild(event.target.loader); } } }
Trabajo con ventanas nativas
Es posible cargar un archivo SWF que contenga código de biblioteca para utilizarlo en una aplicación basada en HTML. El modo más sencillo de cargar un archivo SWF en una ventana HTML es utilizar la etiqueta también puede utilizarse la API
Loader directamente.
script, pero
70
Nota: los archivos SWF antiguos creados con ActionScript 1 ó 2 comparten estados globales, como definiciones de clases, objetos singleton y variables globales si están cargados en la misma ventana. Si este tipo de archivo SWF depende de estados globales sin modificar para que funcione correctamente, no podrá cargarse más de una vez en la misma ventana, ni cargarse otro archivo SWF en la misma ventana con las mismas definiciones de clases y variables. Este contenido se puede cargar en ventanas separadas.
Carga de contenido HTML en una ventana NativeWindow
Para cargar contenido HTML en una ventana NativeWindow, puede añadir un objeto HTMLLoader al escenario de la ventana y cargar el contenido HTML en HTMLLoader, o bien crear una ventana que ya contenga un objeto HTMLLoader utilizando el método
HTMLLoader.createRootWindow(). El siguiente ejemplo muestra contenido
HTML en un área de visualización de 300 x 500 píxeles en el escenario de una ventana nativa:
//newWindow is a NativeWindow instance var htmlView:HTMLLoader = new HTMLLoader(); html.width = 300; html.height = 500;
//set the stage so display objects are added to the top-left and not scaled newWindow.stage.align = "TL"; newWindow.stage.scaleMode = "noScale"; newWindow.stage.addChild( htmlView );
//urlString is the URL of the HTML page to load htmlView.load( new URLRequest(urlString) );
Nota: el contenido SWF o PDF de un archivo HTML no se visualiza si la ventana utiliza transparencia (es decir, si la propiedad
transparent de la ventana está establecida como true) o si se escala el control HTMLLoader.
Cómo añadir contenido SWF como superposición en una ventana HTML
Dado que las ventanas HTML están contenidas en una instancia de NativeWindow, es posible añadir objetos de visualización de Flash delante y detrás de la capa HTML en la lista de visualización.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
Para añadir un objeto de visualización sobre la capa HTML, utilice el método addChild() de la propiedad
window.nativeWindow.stage. El método addChild() añade contenido en capas sobre cualquier contenido
existente en la ventana.
71
Para añadir un objeto de visualización debajo de la capa HTML, utilice el método
window.nativeWindow.stage, transfiriendo un valor de cero para el parámetro index. Si coloca un objeto en el
addChildAt() de la propiedad
índice cero, se mueve el contenido existente (incluida la visualización HTML) una capa más arriba y se inserta el nuevo contenido en el capa inferior. Para que el contenido distribuido en capas debajo de la página HTML sea visible, debe establecer la propiedad
paintsDefaultBackground del objeto HTMLlLoader como false. Además, todos los
elementos de la página que establezcan un color de fondo no serán transparentes. Si, por ejemplo, establece un color de fondo para el elemento "body" de la página, ninguna parte de la página será transparente.
El siguiente ejemplo muestra cómo añadir objetos de visualización de Flash como superposiciones y como capas inferiores en una página HTML. El ejemplo crea dos objetos de formas sencillas, y añade uno debajo de contenido HTML y el otro encima. El ejemplo también actualiza la posición de la forma en función del evento
<html> <head> <title>Bouncers</title> <script src="AIRAliases.js" type="text/javascript"></script> <script language="JavaScript" type="text/javascript"> air.Shape = window.runtime.flash.display.Shape;
function Bouncer(radius, color){ this.radius = radius; this.color = color;
//velocity this.vX = -1.3; this.vY = -1;
//Create a Shape object and draw a circle with its graphics property this.shape = new air.Shape(); this.shape.graphics.lineStyle(1,0); this.shape.graphics.beginFill(this.color,.9); this.shape.graphics.drawCircle(0,0,this.radius); this.shape.graphics.endFill();
//Set the starting position this.shape.x = 100; this.shape.y = 100;
//Moves the sprite by adding (vX,vY) to the current position this.update = function(){ this.shape.x += this.vX; this.shape.y += this.vY;
//Keep the sprite within the window if( this.shape.x - this.radius < 0){ this.vX = -this.vX; } if( this.shape.y - this.radius < 0){ this.vY = -this.vY; } if( this.shape.x + this.radius > window.nativeWindow.stage.stageWidth){
enterFrame.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
this.vX = -this.vX; } if( this.shape.y + this.radius > window.nativeWindow.stage.stageHeight){ this.vY = -this.vY; }
}; }
function init(){ //turn off the default HTML background window.htmlLoader.paintsDefaultBackground = false; var bottom = new Bouncer(60,0xff2233); var top = new Bouncer(30,0x2441ff);
//listen for the enterFrame event window.htmlLoader.addEventListener("enterFrame",function(evt){ bottom.update(); top.update(); });
//add the bouncing shapes to the window stage window.nativeWindow.stage.addChildAt(bottom.shape,0); window.nativeWindow.stage.addChild(top.shape); } </script> <body onload="init();"> <h1>de Finibus Bonorum et Malorum</h1> <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p> <p style="background-color:#FFFF00; color:#660000;">This paragraph has a background color.</p> <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga.</p> </body> </html>
72
Este ejemplo proporciona una introducción rudimentaria a algunas técnicas avanzadas que utilizan tanto JavaScript como ActionScript en AIR. Si no está familiarizado con el uso de objetos de visualización de ActionScript, consulte la sección de programación de visualización del manual Programación con Adobe ActionScript 3.0 para obtener más información.

Ejemplo: Creación de una ventana nativa

El siguiente ejemplo muestra cómo crear una ventana nativa:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
public function createNativeWindow():void { //create the init options var options:NativeWindowInitOptions = new NativeWindowInitOptions(); options.transparent = false; options.systemChrome = NativeWindowSystemChrome.STANDARD; options.type = NativeWindowType.NORMAL;
//create the window var newWindow:NativeWindow = new NativeWindow(options); newWindow.title = "A title"; newWindow.width = 600; newWindow.height = 400;
newWindow.stage.align = StageAlign.TOP_LEFT; newWindow.stage.scaleMode = StageScaleMode.NO_SCALE;
//activate and show the new window newWindow.activate(); }
73
Trabajo con ventanas nativas

Gestión de ventanas

Puede utilizar las propiedades y métodos de la clase NativeWindow para gestionar el aspecto, el comportamiento y el ciclo de vida de las ventanas de escritorio.

Obtención de una instancia de NativeWindow

Para poder manipular una ventana, primero es necesario obtener la instancia de la ventana. Puede obtener una instancia de ventana de uno de los lugares siguientes:
El constructor de ventanas nativas utilizado para crear la ventana:
var win:NativeWindow = new NativeWindow(initOptions);
Propiedad nativeWindow del escenario de la ventana:
var win:NativeWindow = stage.nativeWindow;
Propiedad stage de un objeto de visualización en la ventana:
var win:NativeWindow = displayObject.stage.nativeWindow;
Propiedad target de un evento de ventana nativa distribuido por la ventana:
private function onNativeWindowEvent(event:NativeWindowBoundsEvent):void {
var win:NativeWindow = event.target as NativeWindow;
}
Propiedad nativeWindow de una página HTML mostrara en la ventana:
var win:NativeWindow = htmlLoader.window.nativeWindow;
Propiedades activeWindow y openedWindows del objeto NativeApplication:
var nativeWin:NativeWindow = NativeApplication.nativeApplication.activeWindow; var firstWindow:NativeWindow = NativeApplication.nativeApplication.openedWindows[0];
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
NativeApplication.nativeApplication.activeWindow hace referencia a la ventana activa de una aplicación
(pero devuelve
NativeApplication.nativeApplication.openedWindows contiene todas las ventanas de una aplicación de
null si la ventana activa no es una ventana de esta aplicación de AIR). El conjunto
Trabajo con ventanas nativas
AIR que no se han cerrado.

Activación, visualización y ocultación de ventanas

Para activar una ventana, llame al método activate() de NativeWindow. Al activar una ventana, ésta se visualiza en primer plano, recibe la selección del teclado y del ratón y, si es necesario, se hace visible restaurando la ventana o estableciendo la propiedad ventanas de la aplicación. Si se llama al método
visible como true. Cuando se activa una ventana, ésta no cambia el orden del resto de
activate(), la ventana distribuye un evento activate.
74
Para mostrar una ventana oculta sin activarla, establezca la propiedad
visible como true. Esto llevará la ventana al
primer plano, pero no recibirá la selección.
Para ocultar la visibilidad de una ventana, establezca su propiedad
visible como false. Al ocultar una ventana, se
suprime la visualización de la ventana, de los iconos relacionados de la barra de tareas y, en Mac OS X, la entrada del menú Ventana.
Nota: en Mac OS X, no es posible ocultar por completo una ventana minimizada que tenga un icono en la parte de venta del dock. Si la propiedad
visible se establece como false en una ventana minimizada, el icono del Dock de dicha
ventana sigue visualizándose. Si el usuario hace clic en el icono, la ventana se restaura con su estado visible y aparece en la pantalla.

Cambio del orden de visualización de las ventanas

AIR proporciona varios métodos para poder cambiar directamente el orden de visualización de las ventanas. Puede colocar una ventana delante del orden de visualización o detrás, mover una ventana encima de otra o detrás. Al mismo tiempo, el usuario puede reordenar las ventanas activándolas.
Puede mantener una ventana delante del resto si establece su propiedad una ventana con este ajuste, el orden de visualización de las ventanas se ajustará entre sí, pero siempre se visualizarán delante de ventanas que tengan la propiedad
alwaysInFront como false. Las ventanas del grupo superior también se
visualizan sobre el resto de las aplicaciones, incluso si la aplicación de AIR no está activa. Como este comportamiento no es el habitual del resto de usuarios, sólo se debe establecer
alwaysInFront como true cuando sea realmente
necesario. Entre los ejemplos de usos justificados se incluyen:
Ventanas emergentes temporales para controles como sugerencias, listas, menús personalizados o cuadros
combinados. Como estas ventanas se cierran cuando dejan de recibir la selección, está justificado el comportamiento para evitar que el usuario no pueda ver las ventanas.
Mensajes de error y alertas realmente importantes. Si se produce un cambio irrevocable y el usuario no responde a
tiempo, está justificado el comportamiento para poner la alerta en primer plano. Sin embargo, la mayoría de los errores y alertas se pueden gestionar con el orden de visualización normal de las ventanas.
Ventanas temporales superpuestas.
Nota: AIR no obliga a utilizar la propiedad
alwaysInFront correctamente. Si embargo, si su aplicación no se ajusta al
flujo normal del resto de usuarios, es muy probable que termine en la papelera de reciclaje.
alwaysInFront como true. Si hay más de
La clase NativeWindow proporciona las siguientes propiedades y métodos para establecer el orden de visualización de una ventana con respecto a otras:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Miembro Descripción
Propiedad alwaysInFront Especifica si la ventana se muestra en el grupo superior de ventanas.
En casi todos los casos, el mejor ajuste es false. Si cambia el valor de false a true, la ventana se coloca delante del resto (aunque no se activa). Si cambia el valor de del resto de ventanas del grupo superior, aunque delante del resto de ventanas. Si no cambia la propiedad de la ventana, tampoco cambia su orden de visualización.
orderToFront() Trae la ventana al frente.
orderInFrontOf() Coloca la ventana directamente delante de una ventana concreta.
orderToBack() Envía la ventana detrás del resto de ventanas.
orderBehind() Envía la ventana directamente detrás de una ventana concreta.
activate() Coloca la ventana en primer plano, la hace visible y le asigna la selección.
true a false, la ventana se coloca detrás
Trabajo con ventanas nativas
Nota: si una ventana está oculta (visible es false) o minimizada, llamar a los métodos de orden de visualización no produce ningún efecto.
En el sistema operativo Linux, los diferentes administradores de ventana aplican reglas distintas relacionadas con el orden de visualización de la ventana:
En algunos administradores, las ventanas de utilidades siempre se muestran delante de las ventanas normales.
En algunos administradores de ventanas, una ventana de pantalla completa con alwaysInFront establecido en true,
siempre se muestra delante de otras ventanas que también tienen el valor
alwaysInFront definido como true.
75

Cómo cerrar una ventana

Para cerrar una ventana, utilice el método NativeWindow.close().
Al cerrar la ventana, se descarga su contenido, pero si otros objetos tienen referencias a él, éste no se elimina. El método
NativeWindow.close() se ejecuta de forma asíncrona y la aplicación contenida en la ventana se sigue ejecutando
durante el proceso de cierre. El método close distribuye un evento close una vez finalizada la operación de cierre. El objeto NativeWindow sigue siendo técnicamente válido, aunque al intentar acceder a la mayoría de propiedades y métodos de una ventana cerrada, se genera un error IllegalOperationError. No es posible volver a abrir una ventana cerrada. Verifique la propiedad visibilidad de una ventana, establezca la propiedad
Si la propiedad
Nativeapplication.autoExit es true (valor predeterminado), la aplicación se cerrará al cerrarse la
closed de una ventana para ver si se ha cerrado o no. Simplemente para ocultar la
NativeWindow.visible como false.
última ventana.

Permiso para cancelar operaciones con ventanas

Si una ventana utiliza fondo cromático del sistema, es posible cancelar la interacción con el usuario que esté detectando cancelar el comportamiento predeterminado de los eventos adecuados. Por ejemplo, cuando un usuario hace clic en el botón para cerrar el fondo cromático del sistema, se distribuye el evento al método
preventDefault() del evento, la ventana no se cierra.
Si una ventana no utiliza fondo cromático, los eventos de notificación de cambios intencionados no se distribuyen automáticamente antes del cambio. Por ello, si llama a métodos para cerrar una ventana, para cambiar su estado o para definir las propiedades de su contorno, el cambio no se puede cancelar. Para avisar a los componentes de la aplicación antes de que se realice un cambio de ventana, la lógica de la aplicación puede distribuir el evento de notificación correspondiente mediante el método
dispatchEvent() de la ventana.
closing. Si algún detector registrado llama
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
Por ejemplo, la siguiente lógica implementa un controlador de eventos cancelable para un botón de cierre de una ventana:
public function onCloseCommand(event:MouseEvent):void{ var closingEvent:Event = new Event(Event.CLOSING,true,true); dispatchEvent(closing); if(!closingEvent.isDefaultPrevented()){ win.close(); } }
El método dispatchEvent() devuelve false si un detector llama al método preventDefault() del evento. No obstante, también puede devolver
isDefaultPrevented() para probar si se debe cancelar o no el cambio.
false por otros motivos. Por ello, es mejor utilizar explícitamente el método

Maximización, minimización y restauración de una ventana

Para maximizar la ventana, utilice el método maximize() de NativeWindow.
myWindow.maximize();
Para minimizar la ventana, utilice el método minimize() de NativeWindow.
myWindow.minimize();
76
Para restaurar la ventana (es decir, hacer que recupere el tamaño que tenía antes de maximizarla o minimizarla), utilice el método
myWindow.restore();
restore() de NativeWindow.
Nota: el comportamiento resultante de maximizar una ventana de AIR es distinto al comportamiento estándar de Mac OS X. En vez de alternar entre el tamaño “estándar” definido por la aplicación y el último tamaño establecido por el usuario, las ventanas de AIR alternan entre el último tamaño establecido por la aplicación y el tamaño completo utilizable de la pantalla.
En el sistema operativo Linux, los diferentes administradores de ventana aplican reglas distintas relacionadas con la configuración del estado de visualización de la ventana:
En algunos administradores, las ventanas de utilidades no se puede maximizar.
Si se define un tamaño máximo para la ventana, algunas ventanas no permiten que se maximice una ventana. Otros
administradores de ventanas establecen el estado de visualización como maximizado, pero no cambian el tamaño de la ventana. En cualquier caso, no se distribuye ningún evento de cambio de estado de visualización.
Algunos administradores de ventanas no aceptan la configuración maximizable o minimizable de la ventana.

Ejemplo: Minimizar, maximizar, restaurar y cerrar una ventana

El siguiente ejemplo de ActionScript para Flash crea cuatro campos de texto en los que se puede hacer clic y que activan los métodos
minimize(), maximize(), restore() y close() de NativeWindow:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.text.TextField;
public class MinimizeExample extends Sprite { public function MinimizeExample():void { var minTextBtn:TextField = new TextField(); minTextBtn.x = 10; minTextBtn.y = 10; minTextBtn.text = "Minimize"; minTextBtn.background = true; minTextBtn.border = true; minTextBtn.selectable = false; addChild(minTextBtn); minTextBtn.addEventListener(MouseEvent.CLICK, onMinimize);
var maxTextBtn:TextField = new TextField(); maxTextBtn.x = 120; maxTextBtn.y = 10; maxTextBtn.text = "Maximize"; maxTextBtn.background = true; maxTextBtn.border = true; maxTextBtn.selectable = false; addChild(maxTextBtn); maxTextBtn.addEventListener(MouseEvent.CLICK, onMaximize);
var restoreTextBtn:TextField = new TextField(); restoreTextBtn.x = 230; restoreTextBtn.y = 10; restoreTextBtn.text = "Restore"; restoreTextBtn.background = true; restoreTextBtn.border = true; restoreTextBtn.selectable = false; addChild(restoreTextBtn); restoreTextBtn.addEventListener(MouseEvent.CLICK, onRestore);
var closeTextBtn:TextField = new TextField(); closeTextBtn.x = 340; closeTextBtn.y = 10; closeTextBtn.text = "Close Window"; closeTextBtn.background = true; closeTextBtn.border = true; closeTextBtn.selectable = false; addChild(closeTextBtn);
77
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
closeTextBtn.addEventListener(MouseEvent.CLICK, onCloseWindow); } function onMinimize(event:MouseEvent):void { this.stage.nativeWindow.minimize(); } function onMaximize(event:MouseEvent):void { this.stage.nativeWindow.maximize(); } function onRestore(event:MouseEvent):void { this.stage.nativeWindow.restore(); } function onCloseWindow(event:MouseEvent):void { this.stage.nativeWindow.close(); } } }

Cambio de tamaño y desplazamiento de una ventana

Si una ventana utiliza fondo cromático del sistema, éste proporciona controles de arrastre para cambiar el tamaño de la ventana y moverla por el escritorio. Si una ventana no utiliza fondo cromático del sistema, deberá añadir sus propios controles para que el usuario pueda cambiarla de tamaño o desplazarla.
78
Nota: para cambiar el tamaño de una ventana, primero debe obtener una referencia a la instancia de NativeWindow. Para obtener más información sobre cómo obtener una referencia a la ventana, consulte “Obtención de una instancia de
NativeWindow” en la página 73.
Cambio de tamaño de una ventana
Para que un usuario pueda cambiar el tamaño de una ventana de forma interactiva, utilice el método de NativeWindow. Si se llama a este método desde un evento cargo del ratón y finaliza cuando el sistema operativo recibe un evento
mouseDown, la operación de cambio de tamaño corre a
mouseUp. Cuando se llama a startResize(),
startResize()
se transfiere un argumento que especifica el borde y la esquina desde los que se puede cambiar el tamaño de la ventana.
Para establecer el tamaño de la ventana mediante programación, defina las propiedades de la ventana
bounds con las dimensiones deseadas. Si se establecen los límites, la posición y el tamaño de la ventana se pueden
o
width, height
modificar al mismo tiempo. Sin embargo, no se puede garantizar el orden en que suceden los cambios. Algunos administradores de ventanas de Linux no permiten que las ventanas se amplíen fuera de los límites de la pantalla del escritorio. En estos casos, el tamaño final de la ventana puede estar limitado debido al orden en que se establecen las propiedades, aunque con el resultado goblal de los cambios se podría haber obtenido una ventana válida. Por ejemplo, si se modifica la altura y la posición y de una ventana junto a la parte inferior de la pantalla, puede que no se produzca el cambio completo de altura cuando se aplique el cambio de altura antes del cambio de posición y.
Nota: en Linux, las propiedades de la ventana se modifican de forma asincrónica. Si se establece una propiedad en una línea del programa y se lee el valor en la siguiente, el valor leído aún reflejará la configuración anterior. Puede utilizar los eventos generados por la ventana para detectar el momento en que se aplica el cambio.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
El modo de escala del escenario determina cómo se comporta el escenario de la ventana y su contenido cuando se cambia la ventana de tamaño. No olvide que los modos de escala del escenario están diseñados para situaciones (como un navegador Web) en las que la aplicación no controla el tamaño ni la relación de aspecto de la visualización. En general, los mejores resultados se obtienen estableciendo la propiedad Si quiere escalar también el contenido de la ventana, debe establecer los parámetros
scaleMode como StageScaleMode.NO_SCALE.
scaleX y scaleY del contenido
como respuesta a los cambios de los límites de la ventana.
Desplazamiento de una ventana
Para desplazar una ventana sin cambiar su tamaño, utilice el método el método
startResize(), cuando se llama a startMove() desde un evento mouseDown, el proceso de
desplazamiento corre a cargo del ratón y finaliza cuando el sistema operativo recibe un evento
startMove() de NativeWindow. Al igual que
mouseUp.
79
Para obtener más información sobre los métodos
startResize y startMove, consulte el manual Referencia del
lenguaje y componentes ActionScript 3.0 (http://www.adobe.com/go/learn_air_aslr_es).

Ejemplo: Cambio de tamaño y desplazamiento de ventanas

El siguiente ejemplo muestra como iniciar el campo de tamaño y las operaciones de desplazamiento de una ventana:
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.display.NativeWindowResize;
public class NativeWindowResizeExample extends Sprite { public function NativeWindowResizeExample():void { // Fills a background area. this.graphics.beginFill(0xFFFFFF); this.graphics.drawRect(0, 0, 400, 300); this.graphics.endFill();
// Creates a square area where a mouse down will start the resize. var resizeHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, this.height - 20); resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartResize);
// Creates a square area where a mouse down will start the move. var moveHandle:Sprite = createSprite(0xCCCCCC, 20, this.width - 20, 0); moveHandle.addEventListener(MouseEvent.MOUSE_DOWN, onStartMove); }
public function createSprite(color:int, size:int, x:int, y:int):Sprite { var s:Sprite = new Sprite();
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
s.graphics.beginFill(color); s.graphics.drawRect(0, 0, size, size); s.graphics.endFill(); s.x = x; s.y = y; this.addChild(s); return s; }
public function onStartResize(event:MouseEvent):void { this.stage.nativeWindow.startResize(NativeWindowResize.BOTTOM_RIGHT); }
public function onStartMove(event:MouseEvent):void { this.stage.nativeWindow.startMove(); } } }
80

Detección de eventos de ventanas

Para detectar los eventos distribuidos por una ventana, debe registrar un detector en la instancia de la ventana. Por ejemplo, para detectar un evento closing, debe registrar un detector con la ventana del modo siguiente.
myWindow.addEventListener(Event.CLOSING, onClosingEvent);
Cuando se distribuye un evento, la propiedad target hace referencia a la ventana que envía el evento.
La mayoría de eventos de ventanas tienen dos mensajes relacionados. El primer mensaje indica que el cambio en la ventana es inminente (se puede cancelar), mientras que el segundo mensaje indica que el cambio ya se ha producido. Por ejemplo, si el usuario hace clic en el botón de cierre de una ventana, de distribuye el mensaje del evento closing. Si ningún detector cancela el evento, la ventana se cierre y el evento close se distribuye a todos los detectores.
Normalmente, los eventos de advertencia como para activar un evento. Si se llama al método el evento mediante el método
closing (sólo el evento close). Sin embargo, es posible construir un objeto de evento de cierre y distribuirlo
dispatchEvent() de ventana.
Los eventos de ventana que distribuye un objeto Event son:
Evento Descripción
activate Se distribuye cuando la ventana recibe la selección.
deactivate Se distribuye cuando la ventana deja de recibir la selección.
closing Se distribuye cuando la ventana va a cerrarse. Esto sólo ocurre automáticamente al pulsar el botón de cierre del
fondo cromático o, en Mac OS X, al invocar el comando Salir.
closing sólo se distribuyen si se utiliza el fondo cromático del sistema
close() de la ventana, por ejemplo, no se distribuye automáticamente
close Se distribuye cuando la ventana se ha cerrado.
Los eventos de ventana que distribuye un objeto NativeWindowBoundsEvent son:
Evento Descripción
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
81
moving Si se distribuye inmediatamente antes de que la esquina superior izquierda de la ventana cambie de posición,
move Se distribuye una vez que la esquina superior izquierda de la ventana ha cambiado de posición.
resizing Se distribuye inmediatamente antes de que la anchura o la altura de la ventana cambie, bien como resultado
resize Se distribuye después de que la ventana haya cambiado de tamaño.
bien como resultado del desplazamiento, cambio de tamaño o modificación del estado de visualización de la ventana.
del cambio de tamaño o por la modificación del estado de visualización.
En eventos NativeWindowBoundsEvent, puede utilizar las propiedades beforeBounds y afterBounds para determinar los límites de la ventana antes y después el cambio.
Los eventos de ventana que distribuye un objeto NativeWindowDisplayStateEvent son:
Evento Descripción
displayStateChanging Se distribuye inmediatamente antes de que cambie el estado de visualización de la ventana.
displayStateChange Se distribuye una vez ha cambiado el estado de visualización de la ventana.
En eventos NativeWindowDisplayStateEvent, puede utilizar las propiedades beforeDisplayState y
afterDisplayState para determinar el estado de visualización de la ventana antes y después del cambio.
En algunos administradores de ventanas de Linux, no se distribuye ningún evento de cambio de estado de visualización cuando se maximiza una ventana con una configuración de tamaño máximo. (La ventana se establece en el estado de visualización maximizado, pero no se cambia el tamaño.)

Visualización de ventanas a pantalla completa

Al establecer la propiedad displayState de la clase Stage como StageDisplayState.FULL_SCREEN_INTERACTIVE la ventana pasa a modo de pantalla completa. La acción del teclado esta permitida en este modo. (En contenido SWF ejecutado en un navegador, no está permitida la acción del teclado). Para salir del modo de pantalla completa, el usuario debe pulsar la tecla Esc.
Nota: algunos administradores de ventanas de Linux no cambiarán las dimensiones de la ventana para que se rellene la pantalla si se establece un tamaño máximo para la ventana (aunque se elimina el fondo cromático del sistema de la ventana).
El siguiente ejemplo de ActionScript para Flash simula un terminal simple de texto a pantalla completa:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con ventanas nativas
import flash.display.Sprite; import flash.display.StageDisplayState; import flash.text.TextField; import flash.text.TextFormat;
public class FullScreenTerminalExample extends Sprite { public function FullScreenTerminalExample():void { var terminal:TextField = new TextField(); terminal.multiline = true; terminal.wordWrap = true; terminal.selectable = true; terminal.background = true; terminal.backgroundColor = 0x00333333;
this.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
addChild(terminal); terminal.width = 550; terminal.height = 400;
terminal.text = "Welcome to the dumb terminal application. Press the ESC key to exit.\n_";
var tf:TextFormat = new TextFormat(); tf.font = "Courier New"; tf.color = 0x00CCFF00; tf.size = 12; terminal.setTextFormat(tf);
terminal.setSelection(terminal.text.length - 1, terminal.text.length); } }
82

Capítulo 11: Pantallas

Para ver información sobre las pantallas del escritorio que estén conectadas a un ordenador, utilice la clase Screen de Adobe® AIR®.

Información suplementaria en línea sobre las pantallas

Encontrará más información sobre la clase Screen y cómo trabajar con las pantallas en las fuentes siguientes:
Guías de inicio rápido (Centro de desarrollo de Adobe AIR)
Medición del escritorio virtual (en inglés)
Referencia del lenguaje
Screen
83
Artículos y muestras del Centro de desarrollo de Adobe
Centro de desarrollo de Adobe AIR para Flash (en inglés); busque "AIR screens".

Aspectos básicos de las pantallas

La API de la pantalla contiene una sola clase, Screen, que proporciona miembros estáticos para obtener información sobre las pantallas del sistema y miembros de instancia para describir una pantalla en particular.
Un sistema informático puede tener conectados varios monitores que se corresponden con diversas pantallas de escritorio dispuestas en un espacio virtual. La clase Screen de AIR facilita información sobre las pantallas, la disposición y el espacio aprovechable de las mismas. Si hay más de un monitor que se corresponde con la misma pantalla, es que existe una sola pantalla. Si el tamaño de la pantalla es superior a la superficie de visualización del monitor, no hay manera de determinar qué parte de la pantalla está visible en este momento.
Una pantalla representa una superficie independiente de visualización del escritorio. Las pantallas se describen como rectángulos dentro del escritorio virtual. El punto cero del sistema de coordenadas del escritorio virtual es el ángulo superior izquierdo de la pantalla designada como pantalla principal. Todos los valores que se utilizan para describir una pantalla se expresan en píxeles.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Pantallas
En esta disposición de pantallas, hay dos pantallas en el escritorio virtual. Las coordenadas del ángulo superior izquierdo de la pantalla principal (nº 1) son siempre (0,0). Si se modifica la disposición de pantallas para designar la pantalla nº 2 como pantalla principal, las coordenadas de la pantalla nº 1 pasan a ser cifras negativas. Las barras de menús, las barras de tareas y los docks se excluyen al notificar los límites utilizables para una pantalla.
84
Para obtener más información sobre la clase, los métodos, las propiedades y los eventos de la API de la pantalla, consulte Referencia del lenguaje y componentes ActionScript 3. (http://www.adobe.com/go/learn_air_aslr_es).

Enumeración de las pantallas

Las pantallas del escritorio virtual se pueden enumerar utilizando los siguientes métodos y propiedades de pantalla:
Método o propiedad Descripción
Screen.screens Proporciona un conjunto de objetos Screen que describen las pantallas disponibles. Obsérvese que el
Screen.mainScreen Proporciona un objeto Screen para la pantalla principal. En Mac OS X la pantalla principal es la que
Screen.getScreensForRectangle() Proporciona un conjunto de objetos Screen que describen las pantallas a las que cruza el rectángulo
Los valores que producen los métodos y propiedades de la clase Screen no deben guardarse. El usuario o el sistema operativo puede modificar en cualquier momento las pantallas disponibles y la disposición de las mismas.
En el ejemplo siguiente se utiliza la API de la pantalla para desplazar una ventana entre varias pantallas en función de la pulsación de las teclas de flecha. Para desplazar la ventana a la siguiente pantalla, el ejemplo obtiene el conjunto
screens y lo ordena en sentido vertical u horizontal (dependiendo de la tecla de flecha que se pulse). El código pasa
por el conjunto ordenado y compara cada pantalla con las coordenadas de la pantalla actual. Para identificar la pantalla actual de la ventana, el ejemplo llama a
orden del conjunto no tiene importancia.
contiene la barra de menús. En Windows la pantalla principal es la designada como tal por el sistema.
determinado. El rectángulo que se pasa a este método tiene las coordenadas en píxeles en el escritorio virtual. Si el rectángulo no forma intersección con ninguna pantalla, el conjunto estará vacío. Este método puede emplearse para averiguar en qué pantallas se muestra una ventana.
Screen.getScreensForRectangle() y se pasan los límites de la ventana.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Pantallas
package { import flash.display.Sprite; import flash.display.Screen; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.display.StageAlign; import flash.display.StageScaleMode;
public class ScreenExample extends Sprite { public function ScreenExample() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey); }
private function onKey(event:KeyboardEvent):void{ if(Screen.screens.length > 1){ switch(event.keyCode){ case Keyboard.LEFT : moveLeft(); break; case Keyboard.RIGHT : moveRight(); break; case Keyboard.UP : moveUp(); break; case Keyboard.DOWN : moveDown(); break; } } }
private function moveLeft():void{ var currentScreen = getCurrentScreen(); var left:Array = Screen.screens; left.sort(sortHorizontal); for(var i:int = 0; i < left.length - 1; i++){ if(left[i].bounds.left < stage.nativeWindow.bounds.left){ stage.nativeWindow.x += left[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; } } }
private function moveRight():void{ var currentScreen:Screen = getCurrentScreen(); var left:Array = Screen.screens; left.sort(sortHorizontal); for(var i:int = left.length - 1; i > 0; i--){ if(left[i].bounds.left > stage.nativeWindow.bounds.left){ stage.nativeWindow.x +=
85
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Pantallas
left[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += left[i].bounds.top - currentScreen.bounds.top; } } }
private function moveUp():void{ var currentScreen:Screen = getCurrentScreen(); var top:Array = Screen.screens; top.sort(sortVertical); for(var i:int = 0; i < top.length - 1; i++){ if(top[i].bounds.top < stage.nativeWindow.bounds.top){ stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; break; } } }
private function moveDown():void{ var currentScreen:Screen = getCurrentScreen();
var top:Array = Screen.screens; top.sort(sortVertical); for(var i:int = top.length - 1; i > 0; i--){ if(top[i].bounds.top > stage.nativeWindow.bounds.top){ stage.nativeWindow.x += top[i].bounds.left - currentScreen.bounds.left; stage.nativeWindow.y += top[i].bounds.top - currentScreen.bounds.top; break; } } }
private function sortHorizontal(a:Screen,b:Screen):int{ if (a.bounds.left > b.bounds.left){ return 1; } else if (a.bounds.left < b.bounds.left){ return -1; } else {return 0;} }
private function sortVertical(a:Screen,b:Screen):int{ if (a.bounds.top > b.bounds.top){ return 1; } else if (a.bounds.top < b.bounds.top){ return -1; } else {return 0;} }
private function getCurrentScreen():Screen{ var current:Screen; var screens:Array = Screen.getScreensForRectangle(stage.nativeWindow.bounds); (screens.length > 0) ? current = screens[0] : current = Screen.mainScreen; return current; } } }
86

Capítulo 12: Trabajo con menús nativos

Se deben utilizar las clases en la API del menú nativo para definir los menús de aplicación, ventana, contextuales y emergentes.

Información adicional en línea de menús nativos

Se puede encontrar más información sobre la API de menú nativo y la utilización de menús nativos de los siguientes recursos:
Guías de inicio rápido (Centro de desarrollo de Adobe AIR)
Adición de menús nativos a una aplicación de AIR (en inglés)
Referencia del lenguaje
NativeMenu
NativeMenuItem
87
Artículos y muestras del Centro de desarrollo de Adobe
Centro de desarrollo de Adobe AIR para Flex (en inglés); busque "AIR menus".

Aspectos básicos del menú AIR

Las clases de menú nativo permiten acceder a las funciones del menú nativo del sistema operativo donde se ejecuta la aplicación. Se pueden utilizar los objetos NativeMenu para menús de aplicación (disponibles en Mac OS X), menús de ventana (disponibles en Windows y Linux), menús contextuales y menús emergentes.

Clases del menú AIR

Las clases de Menú AIR™ de Adobe® incluyen:
Paquete Clases
flash.display
flash.ui
flash.events
NativeMenu
NativeMenuItem
ContextMenu
ContextMenuItem
Evento
ContextMenuEvent
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con menús nativos

Variedades de menú

AIR admite los siguientes tipos de menús:
Menús de aplicación Un menú de aplicación es un menú global que se aplica a toda la aplicación. Los menús de
aplicación son compatibles en Mac OS X, pero no en Windows o Linux. En Mac OS X, el sistema operativo automáticamente crea un menú de aplicación. Se puede utilizar la API del menú AIR para añadir elementos y submenús secundarios a los menús estándar. Se pueden añadir detectores para gestionar los comandos de menú existentes. O bien se pueden quitar elementos existentes.
Menús de ventana Un menú de ventana está asociado con una sola ventana y se muestra debajo de la barra de título.
Se pueden añadir los menús a una ventana creando un objeto NativeMenu y asignándolo a la propiedad objeto NativeWindow. Los menús de ventana son compatibles con los sistemas operativos Windows y Linux, pero no en Mac OS X. Los menús de ventana nativos solo se pueden utilizar con ventanas que tienen fondo cromático del sistema.
Menús contextuales Los menús contextuales se abren en respuesta a un clic con el botón derecho del ratón o a un clic
de un comando en un objeto interactivo en el contenido SWF o en un elemento de documento en un contenido HTML. Puede crear un menú contextual utilizando la clase NativeMenu o ContextMenu. En el contenido HTML, se puede utilizar el Webkit HTML y las API JavaScript para añadir menús contextuales a elementos HTML.
Menús del icono de acoplamiento y bandeja del sistema Estos menús de iconos son similares a los menús
contextuales y se asignan a un icono de aplicación en el acoplamiento de Mac OS X o las áreas de notificación en la barra de tareas de Windows y Linux. Los menús del icono de acoplamiento y bandeja del sistema utilizan la clase NativeMenu. En Mac OS X, los elementos en el menú se añaden por encima de los elementos del sistema operativo estándar. En Windows o Linux, no hay un menú estándar.
menu del
88
Menús emergentes Un menú emergente de AIR es como un menú contextual, pero no necesariamente está asociado
con un determinado objeto o elemento de aplicación. Los menús emergentes se pueden mostrar en cualquier parte de una ventana llamando al método
Menús personalizados El sistema operativo invoca los menús nativos y, como tal, existen fuera de los modelos de
display() de cualquier objeto NativeMenu.
representación de Flash y HTML. Se pueden crear los propios menús no nativos utilizando MXML, ActionScript o JavaScript. Las clases de menú AIR no proporcionan ninguna capacidad para controlar la invocación de menús nativos.
Menús predeterminados
El sistema operativo o una clase incorporada de AIR proporciona los siguientes menús predeterminados:
Menú de aplicación en Mac OS X
Menú de icono de acoplamiento en Mac OS X
Menú contextual para texto e imágenes seleccionados en un contenido HTML
Menú contextual para texto seleccionado en un objeto TextField (o en un objeto que amplía TextField)

Estructura de los menús

Los menús, por naturaleza, se crean en jerarquías. Los objetos NativeMenu contienen objetos secundarios NativeMenuItem. Los objetos NativeMenuItem que, a su vez, representan los submenús pueden tener objetos NativeMenu. El objeto de menú principal o raíz en la estructura representa la barra de menús para los menús de aplicación y de ventana. (Los menús contextuales, de icono y los menús emergentes no cuentan con una barra de menús).
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con menús nativos
El siguiente diagrama muestra la estructura de un menú típico. El menú raíz representa la barra de menús y contiene dos elementos de menú que hacen referencia a un submenú Archivo y a un submenú Editar. El submenú Archivo en esta estructura contiene dos elementos de comando y un elemento que hace referencia a un submenú Menú Abrir reciente, que contiene tres elementos. El submenú Editar contiene tres comandos y un separador.
89
La definición de un submenú requiere un objeto NativeMenu y NativeMenuItem. El objeto NativeMenuItem define la etiqueta que se muestra en el menú principal y permite al usuario abrir el submenú. El objeto NativeMenu actúa como un contenedor para los elementos en el submenú. El objeto NativeMenuItem hace referencia al objeto NativeMenu a través de la propiedad
submenu de NativeMenuItem.
Para ver un ejemplo de código que crea este menú, consulte “Ejemplo: Menú de ventana y de aplicación” en la página 99.

Eventos de menú

Los objetos NativeMenu y NativeMenuItem ambos distribuyen eventos displayingy select:
Displaying: Inmediatamente antes de visualizar un menú, el menú y los elementos de menú distribuyen un evento
displaying a cualquier detector registrado. El evento displaying proporciona la oportunidad de actualizar los
contenidos de menú o la apariencia de elementos antes de que se muestre al usuario. Por ejemplo, en el detector para el evento actual de documentos recientemente visualizados.
La propiedad donde el detector está registrado: ya sea el mismo menú o uno de sus elementos.
displaying de un menú “Abrir reciente”, se pueden cambiar los elementos de menú para reflejar la lista
target del objeto de evento es siempre el menú que se está por mostrar. currentTarget es el objeto
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con menús nativos
Nota: también se distribuye el evento displaying cuando se accede al estado del menú o a uno de sus elementos.
Select: Cuando el usuario elige un elemento de comando, el elemento distribuye un evento select a cualquier
detector registrado. Los elementos de submenú y separador no se pueden seleccionar y por ende nunca distribuyen un
select.
evento
90
Un evento detectar eventos
select se propaga desde un elemento de menú al menú que lo contienen hasta el menú raíz. Se pueden
selectdirectamente en un elemento y en niveles superiores en la estructura del menú. Cuando se
detecta el evento select en un menú, se puede identificar el elemento seleccionado utilizando la propiedad de evento
target. A medida que el evento se propaga a través de la jerarquía, la propiedad currentTarget del objeto de evento
identifica el objeto de menú actual.
Nota: los objetos ContextMenu y ContextMenuItem distribuyen eventos
select y displaying.
eventos
menuItemSelect y menuSelect así como

Equivalentes de teclas para comandos de menú

Se puede asignar un equivalente de tecla (a veces llamado acelerador) a un comando de menú. El elemento de menú distribuye un evento menú que contiene el elemento debe ser parte del menú de aplicación o de la ventana activa para que se invoque el comando.
Los equivalentes de teclas tienen dos partes, una cadena que representa la tecla principal y un conjunto de teclas modificadoras que también se deben presionar. Para asignar la tecla principal, establezca la propiedad del elemento de menú a la cadena de un solo carácter para dicha tecla. Se utiliza una letra mayúscula, la tecla Mayús se añade automáticamente al conjunto modificador.
En Mac OS X, el modificador predeterminado es la tecla de comando ( la tecla de control ( modificador. Para asignar diferentes teclas modificadoras, asigne un nuevo conjunto que contenga los códigos de tecla deseados a la propiedad modificadores predeterminados o si asigna su propio conjunto modificador, se añade la tecla Mayús si la cadena que asigna a la propiedad las teclas modificadoras se definen en la clase Keyboard.
select a cualquier detector registrado cuando se presiona la tecla o combinación de teclas. El
keyEquivalent
Keyboard.COMMAND). En Windows y Linux, es
Keyboard.CONTROL). Estas teclas predeterminadas se añaden automáticamente al conjunto
keyEquivalentModifiers. El conjunto predeterminado se sobrescribe. Si utiliza los
keyEquivalent es una letra mayúscula. Las constantes de los códigos de tecla para utilizar en
La cadena equivalente de la tecla asignada se muestra automáticamente junto al nombre del elemento de menú. El formato depende del sistema operativo del usuario y las preferencias del sistema.
Nota: si asigna el valor
Keyboard.COMMAND a un conjunto de modificadores de teclas en el sistema operativo Windows,
no se muestra ningún equivalente de tecla en el menú. Sin embargo, se debe utilizar la tecla de control para activar el comando de menú.
En el siguiente ejemplo se asigna
var item:NativeMenuItem = new NativeMenuItem("Ungroup"); item.keyEquivalent = "G";
Ctrl+Mayús+G como el equivalente de tecla para un elemento de menú:
En este ejemplo se asigna Ctrl+Mayús+G como el equivalente de tecla configurando directamente el conjunto modificador:
var item:NativeMenuItem = new NativeMenuItem("Ungroup"); item.keyEquivalent = "G"; item.keyEquivalentModifiers = [Keyboard.CONTROL];
Nota: los equivalentes de teclas solo se activan para menús de ventana y de aplicación. Si se añade un equivalente de tecla a un menú contextual o emergente, el mismo se muestra en la etiqueta de menú, pero el comando de menú asociado nunca se invoca.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con menús nativos

Letras de selección

Las letras de selección son parte de la interfaz del teclado del sistema operativo a los menús. Linux, Mac OS X y Windows permiten a los usuarios abrir menús y seleccionar comandos con el teclado, pero hay pequeñas diferencias.
En Mac OS X, el usuario escribe las primeras letras del menú o comando y presiona la tecla de retorno. La propiedad
mnemonicIndex se omite.
En Windows, solo una letra es significativa. Como valor predeterminado, la letra significativa es el primer carácter de la etiqueta, pero si se asigna una letra de selección al elemento de menú, entonces el carácter significativo se convierte en la letra designada. Si dos elementos en un menú tienen el mismo carácter significativo (independientemente si se ha asignado una letra de selección) entonces la interacción del teclado con el menú cambia ligeramente. En lugar de presionar una sola letra para seleccionar el menú o comando, el usuario debe presionar la letra tantas veces como sea necesario para resaltar el elemento deseado y luego presionar la tecla Intro para completar la selección. Para mantener un comportamiento coherente, debe asignar una letra de selección exclusiva para cada elemento en un menú para los menús de ventana.
En Linux, no se proporciona ninguna letra de selección predeterminada. Es necesario especificar un valor para la propiedad
Se debe especificar la letra de selección como un índice en la cadena de la etiqueta. El índice del primer carácter en una etiqueta es 0. Por consiguiente, para utilizar “r” como la letra de selección para un elemento de menú denominado “Formato,” se debe establecer la propiedad
mnemonicIndex de un elemento de menú para proporcionar una letra de selección.
mnemonicIndex igual a 2.
91
var item:NativeMenuItem = new NativeMenuItem("Format"); item.mnemonicIndex = 2;

Estado de los elementos de menú

Los elementos de menú tienen dos propiedades de estado, checked y enabled:
checked Se debe establecer en true para mostrar una marca de verificación junto a la etiqueta del elemento.
var item:NativeMenuItem = new NativeMenuItem("Format"); item.checked = true;
enabled Seleccione el valor true o false para controlar si el comando está activado o no. Los elementos desactivados
aparecen “sombreados” y no distribuyen eventos
var item:NativeMenuItem = new NativeMenuItem("Format"); item.enabled = false;
select.

Asociación de un objeto a un elemento de menú

La propiedad data de la clase NativeMenuItem permite hacer referencia a un objeto arbitrario en cada elemento. Por ejemplo, en un menú “Abrir reciente”, puede asignar el objeto File para cada documento a cada elemento de menú.
var file:File = File.applicationStorageDirectory.resolvePath("GreatGatsby.pdf") var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name)); menuItem.data = file;

Creación de menús nativos

Este tema describe la manera de crear los diferentes tipos de menús nativos admitidos en AIR.
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
Trabajo con menús nativos

Creación de un objeto de menú raíz

Para crear un objeto NativeMenu para que actúe como la raíz del menú, se debe utilizar el constructor NativeMenu:
var root:NativeMenu = new NativeMenu();
Para los menús de aplicación y de ventana, el menú raíz representa la barra de menús y solo debe tener los elementos que abren submenús. Los menús contextual y emergentes no tienen una barra de menús, por lo que el menú raíz puede tener líneas separadoras y comandos así como submenús.
Después de crear el menú, se pueden añadir elementos de menú. Los elementos aparecen en el menú en el orden en que se añaden, a menos que se añadan los elementos en un índice específico utilizando el método objeto de menú.
Se puede asignar el menú como un menú de aplicación, de ventana, de icono o contextual o mostrarlo como un menú emergente como se muestra en las siguientes secciones:
Definición del menú de aplicación
NativeApplication.nativeApplication.menu = root;
Nota: Mac OS X define un menú que contiene elementos estándares para cada aplicación. Si se asigna un nuevo objeto NativeMenu a la propiedad
menu del objeto NativeApplication se remplaza el menú estándar. También se puede utilizar
el menú estándar en lugar de sustituirlo.
addItemAt() de un
92
Definición de un menú de ventana
nativeWindowObject.menu = root;
Definición de un menú contextual en un objeto interactivo
interactiveObject.contextMenu = root;
Definición de un menú de icono de acoplamiento
DockIcon(NativeApplication.nativeApplication.icon).menu = root;
Nota: Mac OS X define un menú estándar para el icono de acoplamiento de la aplicación. Cuando se asigna un nuevo NativeMenu a la propiedad de menú del objeto DockIcon, los elementos en ese menú se muestran arriba de los elementos estándar. No se pueden quitar, acceder ni modificar los elementos de menú estándar.
Definición de un menú de icono de bandeja del sistema
SystemTrayIcon(NativeApplication.nativeApplication.icon).menu = root;
Visualización de un menú como un menú emergente
root.display(stage, x, y);

Creación de un submenú

Para crear un submenú, se añade un objeto NativeMenuItem al menú principal y luego se asigna el objeto NativeMenu definiendo el submenú a la propiedad submenú y los objetos de menú asociados:
submenu del elemento. AIR proporciona dos modos de crear elementos de
Se puede crear un elemento de menú y el objeto de menú relacionado en un paso con el método
var editMenuItem:NativeMenuItem = root.addSubmenu(new NativeMenu(), "Edit");
addSubmenu():
También se puede crear el elemento de menú y asignar el objeto de menú a la propiedad submenu de forma separada:
DESARROLLO DE APLICACIONES DE ADOBE AIR 1.5 CON FLASH CS4 PROFESSIONAL
var editMenuItem:NativeMenuItem = root.addItem("Edit", false); editMenuItem.submenu = new NativeMenu();
Trabajo con menús nativos

Creación de un comando de menú

Para crear un comando de menú, añada un objeto NativeMenuItem a un menú y añada un detector de evento que hace referencia a la función que implementa el comando de menú:
var copy:NativeMenuItem = new NativeMenuItem("Copy", false); copy.addEventListener(Event.SELECT, onCopyCommand); editMenu.addItem(copy);
Se puede detectar un evento select en el elemento de comando mismo (como se muestra en el ejemplo) o se puede detectar el evento
select en un objeto de menú principal.
93
Nota: los elementos de menú que representan submenús y líneas separadoras no distribuyen eventos
select y por ende
no se pueden utilizar como comandos.

Creación de una línea separadora de menú

Para crear una línea separadora, se debe crear un NativeMenuItem, definir el parámetro isSeparator en true en el constructor. Luego añadir el elemento separador al menú en la ubicación correcta:
var separatorA:NativeMenuItem = new NativeMenuItem("A", true); editMenu.addItem(separatorA);
La etiqueta especificada para el separador, si hay una, no se muestra.

Menús contextuales

En el contenido SWF, a cualquier objeto que hereda de InteractiveObject se le puede asignar un menú contextual asignando un objeto de menú a la propiedad tipo NativeMenu o ContextMenu.
Puede detectar eventos de menú nativo o eventos de menús contextuales con el uso de las clases ContextMenu y ContextMenuItem; ambas se distribuyen. Una ventaja que ofrecen las propiedades del objeto ContextMenuEvent es que contextMenuOwner identifica el objeto al que se asocia el menú y hizo clic para abrir el menú. Esta información no está disponible en el objeto NativeMenuEvent.
contextMenu. El objeto de menú asignado a contextMenu puede ser del
mouseTarget identifica el objeto en el que se
El siguiente ejemplo crea un objeto Sprite y añade un simple menú contextual de edición:
Loading...