Definición de interfaces de usuario del navegador para el contenido HTMLAdobe AIR 1.0 y posterior JavaScript proporciona varias API para controlar la ventana que muestra el contenido HTML. En AIR, estas API se pueden anular implementando una clase HTMLHost personalizada. Ampliación de la clase HTMLHostSi, por ejemplo, su aplicación presenta múltiples objetos HTMLLoader en una interfaz con fichas, tal vez desee que los cambios realizados por las páginas HTML cargadas cambien la etiqueta de la ficha, y no el título de la ventana principal. De igual manera, el código podría responder a una llamada window.moveTo() si se reposiciona el objeto HTMLLoader en el contenedor del objeto de visualización principal moviendo la ventana que contiene el objeto HTMLLoader, no haciendo nada o haciendo algo completamente diferente. La clase HTMLHost de AIR controla las siguientes propiedades y métodos de JavaScript:
Cuando se crea un objeto HTMLLoader usando new HTMLLoader(), las propiedades o métodos listados de JavaScript no se activan. La clase HTMLHost proporciona una implementación predeterminada de navegador de estas API de JavaScript. Asimismo se puede ampliar la clase HTMLHost para personalizar el comportamiento. Para crear un objeto HTMLHost que admite el comportamiento predeterminado, configure el parámetro defaultBehaviors en true en el constructor HTMLHost: var defaultHost:HTMLHost = new HTMLHost(true); Cuando se crea una ventana HTML en AIR con el método createRootWindow() de la clase HTMLLoader, se asigna inmediatamente una instancia HTMLHost que admite comportamientos predeterminados. Es posible cambiar el comportamiento del objeto host asignando una implementación HTMLHost diferente a la propiedad htmlHost de HTMLLoader o asignar null para desactivar las funciones completamente. Nota: AIR asigna un objeto HTMLHost predeterminado a la ventana inicial creada para una aplicación de AIR basada en HTML y cualquier ventana creada por la implementación predeterminada del método window.open() de JavaScript.
Ejemplo: Ampliación de la clase HTMLHostEn el siguiente ejemplo se muestra cómo personalizar la manera en que un objeto HTMLLoader afecta a la interfaz de usuario, ampliando la clase HTMLHost: Ejemplo de Flex:
Para probar el código descrito aquí, incluya un archivo HTML con el siguiente contenido en el directorio de la aplicación: <html>
<head>
<title>Test</title>
</head>
<script>
function openWindow()
{
window.runtime.trace("in");
document.title = "foo"
window.open('Test.html');
window.runtime.trace("out");
}
</script>
<body>
<a href="#" onclick="openWindow()">window.open('Test.html')</a>
</body>
</html>
Ejemplo de Flash Professional:
Gestión de cambios en la propiedad window.locationAnule el método locationChange() para gestionar cambios de la URL de la página HTML. Se llama al método locationChange() cuando JavaScript en una página cambia el valor de window.location. En el siguiente ejemplo simplemente se carga la URL solicitada: override public function updateLocation(locationURL:String):void
{
htmlLoader.load(new URLRequest(locationURL));
}
Nota: puede utilizar la propiedad htmlLoader del objeto HTMLHost para hacer referencia al objeto HTMLLoader actual.
Gestión de llamadas JavaScript a window.moveBy(), window.moveTo(), window.resizeTo(), window.resizeBy()Anule el método set windowRect() para gestionar cambios en los límites del contenido HTML. Se llama al método set windowRect() cuando JavaScript en una página llama a window.moveBy(), window.moveTo(), window.resizeTo() o window.resizeBy(). En el siguiente ejemplo simplemente se actualizan los límites de la ventana de escritorio: override public function set windowRect(value:Rectangle):void
{
htmlLoader.stage.nativeWindow.bounds = value;
}
Gestión de llamadas JavaScript a window.open()Anule el método createWindow() para gestionar llamadas JavaScript a window.open(). Las implementaciones del método createWindow() son responsables de la creación y devolución de un nuevo objeto HTMLLoader. Normalmente, se muestra HTMLLoader en una nueva ventana, pero no se requiere la creación de una ventana. En el siguiente ejemplo se muestra cómo implementar la función createWindow() usando HTMLLoader.createRootWindow() para crear la ventana y el objeto HTMLLoader. Asimismo se puede crear un nuevo objeto NativeWindow de forma separada y añadir el HTMLLoader al escenario de la ventana. override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader{
var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(windowCreateOptions.x, windowCreateOptions.y,
windowCreateOptions.width, windowCreateOptions.height);
var htmlControl:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions,
windowCreateOptions.scrollBarsVisible, bounds);
htmlControl.htmlHost = new HTMLHostImplementation();
if(windowCreateOptions.fullscreen){
htmlControl.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
return htmlControl;
}
Nota: este ejemplo asigna la implementación HTMLHost personalizada a cualquier ventana nueva creada con window.open(). Asimismo, si se desea se puede usar una implementación diferente o definir la propiedad htmlHost en null para nuevas ventanas.
El objeto transferido como parámetro al método createWindow() es un objeto HTMLWindowCreateOptions. La clase HTMLWindowCreateOptions incluye propiedades que informan sobre los valores definidos en la cadena de parámetro features en la llamada a window.open():
La clase HTMLLoader no implementa todas las funciones que se pueden especificar en la cadena de función. La aplicación debe proporcionar barras de desplazamiento, barras de ubicación, barras de menús, barras de estado y barras de herramientas según corresponda. Los otros argumentos al método window.open() JavaScript los gestiona el sistema. Una implementación createWindow() no debe cargar contenido en el objeto HTMLLoader ni definir el título de la ventana. Gestión de llamadas JavaScript a window.close()Anule el método windowClose() para gestionar llamadas JavaScript a window.close(). En el siguiente ejemplo se cierra la ventana de escritorio cuando se llama al método window.close(): override public function windowClose():void
{
htmlLoader.stage.nativeWindow.close();
}
Las llamadas JavaScript a window.close() no tienen que cerrar la ventana. Podría, por ejemplo, quitar el HTMLLoader de la lista de visualización, dejando la ventana abierta (que puede tener otro contenido), como en el siguiente código: override public function windowClose():void
{
htmlLoader.parent.removeChild(htmlLoader);
}
Gestión de cambios en la propiedad window.statusAnule el método updateStatus() para gestionar los cambios de JavaScript al valor de window.status. En el siguiente ejemplo se rastrea el valor de estado: override public function updateStatus(status:String):void
{
trace(status);
}
El estado requerido se pasa como una cadena al método updateStatus(). El objeto HTMLLoader no proporciona una barra de estado. Gestión de cambios en la propiedad document.titleAnule el método updateTitle() para gestionar los cambios de JavaScript al valor de window.document.title. En el siguiente ejemplo se cambia el título de la ventana y se anexa la cadena, "Sample," al título: override public function updateTitle(title:String):void
{
htmlLoader.stage.nativeWindow.title = title + " - Sample";
}
Cuando se define document.title en una página HTML, el título solicitado se pasa como una cadena al método updateTitle(). Los cambios en document.title no tienen que cambiar el título de la ventana que contiene el objeto HTMLLoader. Podría, por ejemplo, cambiar otro elemento de la interfaz como un campo de texto. Gestión de llamadas JavaScript a window.blur() y window.focus()Anule los métodos windowBlur() y windowFocus() para gestionar las llamadas JavaScript a window.blur() y window.focus(), como se muestra en el siguiente ejemplo: override public function windowBlur():void
{
htmlLoader.alpha = 0.5;
}
override public function windowFocus():void
{
htmlLoader.alpha = 1.0;
NativeApplication.nativeApplication.activate(htmlLoader.stage.nativeWindow);
}
Nota: AIR no proporciona una API para desactivar una ventana o aplicación.
Creación de ventanas con contenido HTML de desplazamientoLa clase HTMLLoader incluye un método estático, HTMLLoader.createRootWindow(), que le permite abrir una nueva ventana(representada por un objeto NativeWindow) que contiene un objeto HTMLLoader y definir algunos parámetros de la interfaz de usuario para esa ventana. El método tiene cuatro parámetros, que permiten definir la interfaz de usuario:
Por ejemplo, el siguiente código usa el método HTMLLoader.createRootWindow() para crear una ventana con contenido HTMLLoader que usa barras de desplazamiento. var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(10, 10, 600, 400);
var html2:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, true, bounds);
var urlReq2:URLRequest = new URLRequest("http://www.example.com");
html2.load(urlReq2);
html2.stage.nativeWindow.activate();
Nota: las ventanas creadas llamando a createRootWindow() directamente en JavaScript permanecen independientes de la ventana HTML abierta. Las propiedades de la ventana JavaScript opener y parent, por ejemplo, son null. Sin embargo, se llama a createRootWindow() indirectamente anulando el método createWindow() de HTMLHost para llamar a createRootWindow(), entonces las propiedades opener y parent sí hacen referencia a la ventana HTML abierta.
|
|