Información sobre la clase HTMLLoader

Adobe AIR 1.0 y posterior

La clase HTMLLoader de Adobe AIR define el objeto de visualización que puede mostrar contenido HTML en una aplicación de AIR. Las aplicaciones basadas en SWF pueden añadir un control HTMLLoader a una ventana existente o crear una ventana HTML que automáticamente contiene un objeto HTMLLoader con HTMLLoader.createRootWindow() . Se puede acceder al objeto HTMLLoader a través de la propiedad window.htmlLoader de JavaScript dentro de la página HTML cargada.

Carga del contenido HTML desde una dirección URL

El siguiente código carga una dirección URL en un objeto HTMLLoader (añada HTMLLoader como elemento secundario del escenario u otro contenedor de objetos de visualización para ver el contenido HTML en su aplicación):

import flash.html.HTMLLoader; 
 
var html:HTMLLoader = new HTMLLoader; 
html.width = 400; 
html.height = 600; 
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); 
html.load(urlReq);

Las propiedades width y height de un objeto HTMLLoader se definen en 0 como valor predeterminado. Se deben definir estas dimensiones cuando se añade un objeto HTMLLoader al escenario. El HTMLLoader distribuye varios eventos cuando se carga una página. Se pueden utilizar estos eventos para determinar cuándo es seguro interactuar con la página cargada. Estos eventos se describen en Gestión de eventos relacionados con HTML en AIR .

Nota: en la arquitectura de Flex, solo se pueden añadir las clases que amplían la clase UIComponent como elementos secundarios de los componentes de contenedor Flex. Por esta razón, no se puede añadir directamente un HTMLLoader como un elemento secundario de un componente de contenedor Flex; sin embargo, se puede utilizar el control Flex mx:HTML, se puede crear una clase personalizada que amplía UIComponent y contiene un HTMLLoader como un elemento secundario de UIComponent o se puede añadir el HTMLLoader como un elemento secundario de un UIComponent y añadir el UIComponent al contenedor Flex.

También se puede representar texto HTML utilizando la clase TextField, pero sus prestaciones son limitadas. La clase TextField de Adobe® Flash® Player admite un subconjunto de marcado HTML, pero dadas las limitaciones de tamaño, las prestaciones son limitadas. (La clase HTMLLoader incluida en Adobe AIR no está disponible en Flash Player).

Carga del contenido HTML desde una cadena

El método loadString() de un HTMLLoader carga una cadena de contenido HTML en el objeto HTMLLoader:

var html:HTMLLoader = new HTMLLoader(); 
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>"; 
html.loadString(htmlStr);

De forma predeterminada, el contenido cargado a través del método loadString() se sitúa en un entorno limitado ajeno a la aplicación con las siguientes características:

  • Tiene acceso para cargar contenido desde la red (pero no desde el sistema de archivos).

  • No puede cargar datos utilizando XMLHttpRequest.

  • La propiedad window.location se establece en "about:blank" .

  • El contenido no puede acceder a la propiedad window.runtime (al igual que puede el contenido de cualquier entorno limitado ajeno a la aplicación).

En AIR 1.5, la clase HTMLLoader incluye una propiedad placeLoadStringContentInApplicationSandbox . Cuando esta propiedad se establece en true para un objeto HTMLLoader, el contenido cargado a través del método loadString() se sitúa en el entorno limitado de la aplicación. (El valor predeterminado es false .) Con ello se proporciona acceso al contenido cargado con el método loadString() a la propiedad window.runtime y a todas las API de AIR. Si esta propiedad se define como true , compruebe que el origen de datos de una cadena utilizada en una llamada al método loadString() sea de confianza. Las instrucciones de código de la cadena HTML se ejecutan con todos los privilegios de la aplicación si esta propiedad se establece en true . Únicamente defina esta propiedad como true si está seguro de que la cadena no contiene código dañino.

En las aplicaciones compiladas con los SDK de AIR 1.0 o AIR 1.1, el contenido cargado a través del método loadString() se sitúa en el entorno limitado de la aplicación.

Reglas importantes de seguridad cuando se utiliza HTML en aplicaciones de AIR

Los archivos que se instalan con la aplicación de AIR tienen acceso a las API de AIR. Por razones de seguridad, el contenido de otras fuentes no lo tienen. Por ejemplo, esta restricción impide que el contenido de un dominio remoto (como http://example.com) lea el contenido en el directorio del escritorio del usuario (o peor).

Dado que existen vulnerabilidades en la seguridad que se pueden abusar llamando a la función eval() (y API relacionadas), de forma predeterminada, el contenido que se instala con la aplicación tiene restricciones para utilizar estos métodos. Sin embargo, algunas arquitecturas de Ajax utilizan el llamado de la función eval() y API relacionadas.

Para estructurar el contenido adecuadamente para que funcione en una aplicación de AIR, se deben tener en cuenta las reglas de las restricciones de seguridad en el contenido proveniente de diferentes fuentes. El contenido que procede de diferentes fuentes se sitúa en clasificaciones de seguridad independientes, denominadas entornos limitados (consulte Entornos limitados de seguridad ). Como valor predeterminado, el contenido instalado con la aplicación se instala en un entorno limitado denominado entorno limitado de aplicación y este entorno le concede acceso a las API de AIR. El entorno limitado de la aplicación normalmente es el entorno limitado más seguro, con restricciones diseñadas para prevenir la ejecución de código sospechoso.

El motor de ejecución permite cargar el contenido instalado con la aplicación en un entorno limitado diferente del entorno limitado de la aplicación. El contenido en los entornos limitados que no pertenecen a la aplicación funciona en un entorno de seguridad similar al de un típico navegador web. Por ejemplo, el código en entornos limitados que no pertenecen a la aplicación puede utilizar el método eval() y métodos relacionados (pero a la vez no puede acceder a las API de AIR). El motor de ejecución incluye maneras para que el contenido en diferentes entornos limitados se comuniquen de modo seguro (sin exponer a las API de AIR a contenidos que no sean de la aplicación). Para más información, consulte Uso de scripts entre contenidos en diferentes entornos limitados de seguridad .

Si se llama al código que no se puede utilizar en un entorno limitado por razones de seguridad, el tiempo 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 evitar este error, siga las prácticas de codificación que se describen en la siguiente sección, Cómo evitar errores de JavaScript relacionados con la seguridad .

Para obtener más información, consulte Seguridad HTML en Adobe AIR .