Documentación de Flash CS3 |
|||
| Programación con ActionScript 3.0 > Seguridad de Flash Player > Carga de contenido | |||
Un archivo SWF puede cargar los siguientes tipos de contenido:
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. Sólo 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 sólo 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 sólo 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 entre dominios (consulte Controles de sitio Web (archivos de política entre dominios)). 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 el método BitmapData.draw() para acceder a los píxeles de la imagen cargada. securityDomain: utilice esta propiedad sólo 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 sólo admite dos valores: null (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 sólo se permite si se encuentra un archivo de política entre dominios 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 creado con ActionScript 3.0 (no una imagen ni un archivo SWF creados en ActionScript 1.0 ó 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 más información, consulte Utilización de la clase ApplicationDomain.Para ver 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, éste 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 más información, consulte Supervisión del progreso de carga.
Cualquier archivo SWF que no 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().
Sólo los archivos SWF locales pueden cargar medios del sistema de archivos local. Sólo los archivos SWF que se encuentren en el entorno limitado local con sistema de archivos o el entorno limitado local de confianza pueden acceder a los datos de estos archivos cargados.
Hay otras restricciones relativas al acceso de datos desde medios cargados. Para ver más detalles, consulte Acceso a medios cargados como datos.
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 entre dominios 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 entre dominios y, si es un archivo SWF, deberá hacer que el código del archivo SWF llame al método allowDomain().
Flash Media Server utiliza el protocolo RTMP (Real-Time Media Protocol) para proporcionar datos, audio y vídeo. Un archivo SWF carga estos medios mediante el método connect() de la clase NetConnection y pasa un 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 ver más detalles, consulte la documentación de Flash Media Server.
En medios cargados de orígenes RTMP, no se pueden utilizar los métodos BitmapData.draw() y SoundMixer.computeSpectrum() para extraer datos de sonido y gráficos de tiempo de ejecución.
Flash CS3
Enviarme un mensaje de correo electrónico cuando se añadan comentarios a esta página | Informe de comentarios
Página actual: http://livedocs.adobe.com/flash/9.0_es/main/00000353.html