Carga de contenido

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

El contenido de Flash Player y AIR puede cargar distintos tipos de contenido, incluyendo los siguientes:

  • Archivos SWF

  • Imágenes

  • Sonido

  • Vídeo

  • Archivos HTML (solo AIR)

  • JavaScript (solo AIR)

Carga de imágenes y archivos SWF con la clase Loader

La clase Loader se utiliza para cargar archivos SWF e imágenes (archivos JPG, GIF o PNG). Cualquier archivo SWF que no se encuentre en el entorno limitado local con sistema de archivos puede cargar archivos SWF e imágenes desde cualquier dominio de red. Solo los archivos SWF de entornos limitados locales pueden cargar archivos SWF e imágenes del sistema de archivos local. Sin embargo, los archivos del entorno limitado local con acceso a la red solo pueden cargar archivos SWF que se encuentren en el entorno limitado local de confianza o en el entorno limitado local con acceso a la red. Los archivos SWF del entorno limitado local con acceso a la red cargan contenido local que no sean archivos SWF (por ejemplo, imágenes), pero no pueden acceder a los datos del contenido cargado.

Al cargar un archivo SWF de un origen que no es de confianza (por ejemplo, un dominio distinto al del archivo SWF raíz del objeto Loader), es aconsejable definir una máscara para el objeto Loader para evitar que el contenido cargado (que es un elemento secundario del objeto Loader) se dibuje en partes del escenario situadas fuera de la máscara, como se muestra en el siguiente código:

import flash.display.*; 
import flash.net.URLRequest; 
var rect:Shape = new Shape(); 
rect.graphics.beginFill(0xFFFFFF); 
rect.graphics.drawRect(0, 0, 100, 100); 
addChild(rect); 
var ldr:Loader = new Loader(); 
ldr.mask = rect; 
var url:String = "http://www.unknown.example.com/content.swf"; 
var urlReq:URLRequest = new URLRequest(url); 
ldr.load(urlReq); 
addChild(ldr);

Cuando se llama al método load() del objeto Loader, se puede especificar un parámetro context , que es un objeto LoaderContext. La clase LoaderContext incluye tres propiedades que permiten definir el contexto de uso del contenido cargado:

  • checkPolicyFile : utilice esta propiedad solo si carga un archivo de imagen (no un archivo SWF). Esta propiedad se especifica en un archivo de imagen de un dominio ajeno al del archivo que contiene el objeto Loader. Si establece esta propiedad en true , Loader comprueba el servidor de origen de un archivo de política URL (consulte Controles de sitio web (archivos de política) ). Si el servidor concede permiso al dominio de Loader, el código ActionScript de los archivos SWF del dominio de Loader puede acceder a los datos de la imagen cargada. Dicho de otro modo, se puede utilizar la propiedad Loader.content para obtener una referencia al objeto Bitmap que representa la imagen cargada, o los métodos BitmapData.draw() o BitmapData.drawWithQuality() para acceder a los píxeles de la imagen cargada. El método drawWithQuality está disponible en Flash Player 11.3 y versiones posteriores; AIR 3.3 y versiones posteriores.

  • securityDomain : utilice esta propiedad solo si carga un archivo SWF (no una imagen). Esta propiedad se especifica en un archivo SWF de un dominio ajeno al del archivo que contiene el objeto Loader. Actualmente, la propiedad securityDomain solo admite dos valores: null (el valor predeterminado) y SecurityDomain.currentDomain . Si se especifica SecurityDomain.currentDomain , el archivo SWF cargado debe importarse en el entorno limitado del objeto SWF que realiza la carga, lo que significa que funciona como si se hubiera cargado del servidor del archivo SWF que realiza la carga. Esto solo se permite si se encuentra un archivo de política URL en el servidor del archivo SWF cargado que permita el acceso por parte del dominio del archivo SWF que realiza la carga. Si se encuentra el archivo de política necesario, el cargador y el contenido cargado pueden manipularse mutuamente mediante script en cuanto se inicia la carga, ya que se encuentran en el mismo entorno limitado. El entorno limitado donde se importa el archivo puede sustituirse a través de una carga normal, seguida de una llamada del archivo SWF cargado al método Security.allowDomain() . Es posible que este último método sea más sencillo, pues el archivo SWF cargado estará entonces en su entorno limitado natural y, por lo tanto, podrá acceder a los recursos de su propio servidor real.

  • applicationDomain : utilice esta propiedad solamente si carga un archivo SWF escrito en ActionScript 3.0 (no una imagen ni un archivo SWF escritos en ActionScript 1.0 o 2.0). Al cargar el archivo, puede especificar que se incluya el archivo en un dominio de aplicación concreto y no en un nuevo dominio de aplicación que sea un elemento secundario del dominio de aplicación del archivo SWF que realiza la carga, que es lo que sucede de forma predeterminada. Tenga en cuenta que los dominios de aplicación son subunidades de los dominios de seguridad y, por lo tanto, puede especificar un dominio de aplicación de destino únicamente si el archivo SWF que está cargando procede de su propio dominio de seguridad, ya sea porque corresponde a su servidor propio o porque lo ha importado en su dominio de seguridad a través de la propiedad securityDomain. Si especifica un dominio de aplicación pero el archivo SWF cargado forma parte de un dominio de seguridad distinto, el dominio especificado en applicationDomain se omite. Para obtener más información, consulte Trabajo con dominios de aplicación .

Para obtener más detalles, consulte Especificación del contexto de carga .

Una propiedad importante de un objeto Loader es contentLoaderInfo , que es un objeto LoaderInfo. A diferencia de lo que ocurre con la mayoría de los objetos, un objeto LoaderInfo se comparte entre el archivo SWF que realiza la carga y el contenido cargado, y siempre es accesible para ambas partes. Cuando el contenido cargado es un archivo SWF, este puede acceder al objeto LoaderInfo a través de la propiedad DisplayObject.loaderInfo. Los objetos LoaderInfo contienen información como el progreso de carga, los URL del cargador y del contenido cargado, o la relación de confianza entre ambos. Para obtener más información, consulte Supervisión del progreso de carga .

Carga de sonido y vídeos

Cualquier contenido, excepto el contenido que se encuentre en el entorno limitado local con sistema de archivos, puede cargar sonido y vídeo de orígenes de red, a través de los métodos Sound.load() , NetConnection.connect() y NetStream.play() .

Solo el contenido de los entornos limitados local con sistema de archivos y de la aplicación de AIR pueden cargar medios desde el sistema de archivos local. Solo el contenido del entorno limitado local con sistema de archivos, del entorno local e la aplicación de AIR o del entorno limitado local de confianza puede acceder a los datos de estos archivos cargados.

Hay otras restricciones relativas al acceso de datos desde medios cargados. Para obtener información más detallada, consulte Acceso a medios cargados como datos .

Carga de archivos SWF e imágenes mediante la etiqueta <img> de un campo de texto

Puede cargar archivos SWF y mapas de bits en un campo de texto mediante la etiqueta <img> , como se muestra en el código siguiente:

<img src = 'filename.jpg' id = 'instanceName' >

Para acceder al contenido cargado de este modo, puede utilizar el método getImageReference() de la instancia de TextField, como se muestra en el código siguiente:

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

Sin embargo, tenga en cuenta que los archivos SWF e imágenes que se cargan de este modo se incluyen en el entorno limitado correspondiente a su origen.

Si se carga un archivo de imagen mediante una etiqueta <img> en un campo de texto, puede ser que haya un archivo de política URL que permita el acceso a datos de la imagen. Para comprobar si hay un archivo de política, añada un atributo checkPolicyFile a la etiqueta <img> , como se muestra en el código siguiente:

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

Si carga un archivo SWF mediante una etiqueta <img> en un campo de texto, puede permitir el acceso a los datos de dicho archivo SWF a través de una llamada al método Security.allowDomain() .

Si utiliza una etiqueta <img> en un campo de texto para cargar un archivo externo (en lugar de usar una clase Bitmap incorporada en el archivo SWF), se crea automáticamente un objeto Loader como elemento secundario del objeto TextField y el archivo externo se carga en dicho objeto Loader, tal y como sucedería si hubiera utilizado un objeto Loader en ActionScript para cargar el archivo. En este caso, el método getImageReference() devuelve el objeto Loader que se creó automáticamente. No es necesario realizar ninguna comprobación de seguridad para acceder a este objeto Loader porque se encuentra en el mismo entorno limitado de seguridad que el código que realiza la llamada.

Sin embargo, si se hace referencia a la propiedad content del objeto Loader para acceder al medio cargado, sí es preciso aplicar las reglas de seguridad. Si el contenido es una imagen, deberá implementar un archivo de política URL y, si es un archivo SWF, deberá hacer que el código del archivo SWF llame al método allowDomain() .

Adobe AIR

En el entorno limitado de la aplicación, las etiquetas <img> de un campo de texto se omiten para evitar ataques de suplantación de identidad. Asimismo, no se permite que el código que se ejecuta en el entorno limitado de la aplicación llame al método allowDomain() de Security.

Contenido proporcionado a través de servidores RTMP

Flash Media Server utiliza el protocolo RTMP (Real-Time Media Protocol) para proporcionar datos, audio y vídeo. Puede cargar estos medios mediante el método connect() de la clase NetConnection y pasa una URL RTMP como parámetro. Flash Media Server puede restringir las conexiones y evitar la descarga del contenido, en función del dominio del archivo que realiza la solicitud. Para obtener más información, consulte la documentación de Flash Media Server en línea en www.adobe.com/go/learn_fms_docs_es .

Para utilizar los métodos BitmapData.draw() , BitmapData.drawWithQuality() y SoundMixer.computeSpectrum() para extraer gráficos en tiempo de ejecución y datos de sonido de los flujos RTMP, debe permitir el acceso en el servidor. Utilice las propiedades Client.videoSampleAccess y Client.audioSampleAccess de ActionScript del servidor para permitir acceso a directorios específicos en Flash Media Server. Para obtener más información, consulte la referencia del lenguaje ActionScript de Flash Media Server . (El método drawWithQuality está disponible en Flash Player 11.3 y versiones posteriores; AIR 3.3 y versiones posteriores.)