Definição de interfaces do usuário como navegadores para conteúdo HTMLAdobe AIR 1.0 e posterior O JavaScript oferece diversas APIs para controlar a janela que exibe o conteúdo HTML. No AIR, essas APIs podem ser sobrescritas com a implementação de uma classe personalizada HTMLHost. Sobre estender a classe HTMLHostSe, por exemplo, o aplicativo apresentar vários objetos HTMLLoader em uma interface com abas, talvez você deseje que as alterações feitas pelas páginas HTML carregadas alterem o rótulo da aba e não o título da janela principal. Da mesma forma, o código pode responder a uma chamada window.moveTo() reposicionando o objeto HTMLLoader no respectivo contêiner do objeto de exibição pai, movendo a janela que contém o objeto HTMLLoader, não fazendo exatamente nada ou fazendo alguma outra coisa por completo. A classe HTMLHost do AIR controla as seguintes propriedades e métodos JavaScript:
Quando você cria um objeto HTMLLoader usando new HTMLLoader(), as propriedades ou métodos JavaScript listados não são ativados. A classe HTMLHost oferece uma implementação padrão como navegador dessas APIs JavaScript. Você também pode estender a classe HTMLHost para personalizar o comportamento. Para criar um objeto HTMLHost que ofereça suporte ao comportamento padrão, defina o parâmetro defaultBehaviors como true no construtor HTMLHost: var defaultHost:HTMLHost = new HTMLHost(true); Quando você cria uma janela HTML no AIR com o método createRootWindow() da classe HTMLLoader, uma ocorrência HTMLHost com suporte aos comportamentos padrão é atribuída automaticamente. Você pode alterar o comportamento do objeto host atribuindo uma implementação HTMLHost diferente à propriedade htmlHost do HTMLLoader ou, pode atribuir null para desativar os recursos completamente. Nota: O AIR atribui um objeto HTMLHost padrão à janela inicial criada para o aplicativo AIR baseado em HTML e qualquer janela criada pela implementação padrão do método window.open() de JavaScript.
Exemplo: Extensão da classe HTMLHostO exemplo a seguir mostra como personalizar a maneira como o objeto HTMLLoader afeta a interface do usuário, estendendo a classe HTMLHost: Exemplo do Flex:
Para testar o código descrito aqui, inclua um arquivo HTML com o seguinte conteúdo no diretório do aplicativo: <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> Exemplo do Flash Professional:
Tratamento de alterações na propriedade window.locationSubstitua o método locationChange() para tratar alterações da URL da página HTML. O método locationChange() é chamado quando o JavaScript em uma página altera o valor de window.location. O exemplo a seguir simplesmente carrega a URL solicitada: override public function updateLocation(locationURL:String):void { htmlLoader.load(new URLRequest(locationURL)); } Nota: Você pode usar a propriedade htmlLoader do objeto HTMLHost para fazer referência ao objeto HTMLLoader atual.
Tratamento de chamadas de JavaScript de window.moveBy(), window.moveTo(), window.resizeTo() e window.resizeBy()Substitua o método set windowRect() para tratar alterações nos limites do conteúdo HTML. O método set windowRect() é chamado quando o JavaScript em uma página chama window.moveBy(), window.moveTo(), window.resizeTo() ou window.resizeBy(). O exemplo a seguir simplesmente atualiza os limites da janela da área de trabalho: override public function set windowRect(value:Rectangle):void { htmlLoader.stage.nativeWindow.bounds = value; } Tratamento de chamadas JavaScript de window.open()Substitui o método createWindow() para tratar chamadas JavaScript de window.open(). As implementações do método createWindow() são responsáveis pela criação e retorno de um novo objeto HTMLLoader. Normalmente você exibe o HTMLLoader em uma nova janela, mas não é necessário criar uma nova janela. O exemplo a seguir ilustra como implementar a função createWindow() usando HTMLLoader.createRootWindow() para criar a janela e o objeto HTMLLoader. Você também pode criar o objeto NativeWindow separadamente e adicionar o HTMLLoader ao palco da janela. 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: Esse exemplo atribui a implementação HTMLHost personalizada a qualquer janela nova criada com window.open(). Você também pode usar uma implementação diferente ou definir a propriedade htmlHost como null em novas janelas, se desejar.
O objeto passado como parâmetro para o método createWindow() é um objeto HTMLWindowCreateOptions. A classe HTMLWindowCreateOptions inclui propriedades que informam os valores definidos na seqüência de parâmetro features na chamada de window.open():
A classe HTMLLoader não implementa todos os recursos que podem ser especificados na string de recursos. O aplicativo deve fornecer barras de rolagem, barras de localização, barras de menu, barras de status e barras de ferramentas, quando apropriado. Os outros argumentos para o método window.open() de JavaScript são tratados pelo sistema. A implementação createWindow() não deve carregar conteúdo no objeto HTMLLoader nem definir o título da janela. Tratamento de chamadas JavaScript de window.close()Substitui o método windowClose() para tratar chamadas JavaScript do método window.close(). O exemplo a seguir fecha a janela da área de trabalho quando o método window.close() é chamado: override public function windowClose():void { htmlLoader.stage.nativeWindow.close(); } As chamadas JavaScript de window.close() não têm que fechar as janelas que as contêm. Você pode, por exemplo, remover o HTMLLoader da lista de exibição, deixando a janela (que pode ter outro conteúdo) aberta, conforme o código a seguir: override public function windowClose():void { htmlLoader.parent.removeChild(htmlLoader); } Tratamento de alterações da propriedade windows.statusSubstitua o método updateStatus() para tratar alterações JavaScript no valor de window.status. O exemplo a seguir rastreia o valor do status: override public function updateStatus(status:String):void { trace(status); } O status solicitado é passado como string para o método updateStatus(). O objeto HTMLLoader não oferece uma barra de status. Tratamento de alterações da propriedade window.document.titleSubstitua o método updateTitle() para tratar alterações JavaScript no valor de window.document.title. O exemplo a seguir altera o título da janela e acrescenta a seqüência, "Sample", ao título: override public function updateTitle(title:String):void { htmlLoader.stage.nativeWindow.title = title + " - Sample"; } Quando document.title estiver definido em uma página HTML, o título solicitado será passado como string para o método updateTitle(). As alterações em document.title não devem alterar o título da janela que contém o objeto HTMLLoader. Você pode, por exemplo, alterar outro elemento de interface, como campo de texto. Tratamento de chamadas JavaScript de window.blur() e window.focus()Substitua os métodos windowBlur() e windowFocus() para tratar chamadas JavaScript dewindow.blur() e window.focus(), conforme mostrado o exemplo a seguir: 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: O AIR não fornece nenhuma API para desativar janela nem aplicativo.
Criação de janelas com conteúdo HTML de rolagemA classe HTMLLoader inclui um método estático, HTMLLoader.createRootWindow(), que permite abrir uma nova janela (representada por um objeto NativeWindow) que contém um objeto HTMLLoader e define algumas configurações da interface do usuário para essa janela. O método tem quatro parâmetros que permitem definir a interface do usuário:
Por exemplo, o código a seguir usa o método HTMLLoader.createRootWindow() para criar uma janela com conteúdo HTMLLoader que usa barras de rolagem: 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: Janelas criadas chamando createRootWindow() diretamente em JavaScript permanecem independentes da janela HTML aberta. As propriedades opener e parent da janela JavaScript, por exemplo, são null. No entanto, se você chamar createRootWindow() indiretamente substituindo o método createWindow() do HTMLHost para chamar createRootWindow(), opener e parent farão referência à janela HTML aberta.
|
![]() |