Definiera webbläsarliknande användargränssnitt för HTML-innehållAdobe AIR 1.0 och senare JavaScript innehåller flera API:er för att kontrollera det fönster som visar HTML-innehållet. I AIR kan dessa API:er skrivas över genom att implementera en anpassad HTMLHost-klass. Om att utöka klassen HTMLHostOm ditt program till exempel visar flera HTMLLoader-objekt i ett flikgränssnitt, kan du önska att titeländringar som görs av de inlästa HTML-sidorna ska ändra flikens titel, och inte huvudfönstrets titel. På samma sätt skulle koden kunna svara på ett window.moveTo()-anrop genom att placera om HTMLLoader-objektet i dess överordnade visningsobjektbehållare, genom att flytta fönstret som innehåller HTMLLoader-objektet, genom att inte göra något eller genom att göra något helt annat. Klassen HTMLHost i AIR används för att kontrollera följande JavaScript-egenskaper och -metoder:
När du skapar ett HTMLLoader-objekt med new HTMLLoader(), aktiveras inte de listade JavaScript-egenskaperna och -modellerna. Klassen HTMLHost innehåller en webbläsarliknande standardimplementering av dessa JavaScript API:er. Du kan också utöka klassen HTMLHost för att anpassa beteendet. Skapa ett HTMLHost-objekt som stöder standardbeteendet genom att ställa parametern defaultBehaviors till true i HTMLHost-konstruktorn. var defaultHost:HTMLHost = new HTMLHost(true); När du skapar ett HTML-fönster i AIR med metoden createRootWindow() från klassen HTMLLoader, tilldelas automatiskt en HTMLHost-instans som stöder standardbeteendena. Du kan ändra host-objektets beteende genom att tilldela en annan HTMLHost-implementering till egenskapen htmlHost i HTMLLoader, eller tilldela null för att inaktivera funktionerna helt. Obs! I AIR tilldelas ett standard-HTMLHost-objekt till det ursprungliga fönstret som skapades för ett HTML-baserat AIR-program, samt till alla fönster som skapas av standardimplementeringen av JavaScript-metoden window.open().
Exempel: Utöka klassen HTMLHostFöljande exempel visar hur du ska anpassa det sätt som ett HTMLLoader-objekt påverkar användargränssnittet genom att utöka klassen HTMLHost: Flex-exempel:
Testa den kod som beskrivs här genom att inkludera en HTML-fil med följande innehåll i programkatalogen: <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> Flash Professional-exempel:
Hantera ändringar av egenskapen window.locationÅsidosätt metoden locationChange() för att hantera ändringar av HTML-sidans URL. Metoden locationChange() anropas när JavaScript på en sida ändrar värdet för window.location. Följande exempel läser in den begärda URL:en: override public function updateLocation(locationURL:String):void { htmlLoader.load(new URLRequest(locationURL)); } Obs! Du kan använda egenskapen htmlLoader i HTMLHost-objektet för att referera det aktuella HTMLLoader-objektet.
Hantera JavaScript-anrop till window.moveBy(), window.moveTo(), window.resizeTo(), window.resizeBy()Åsidosätt metoden set windowRect() för att hantera ändringar av HTML-innehållets gränser. Metoden set windowRect() anropas när JavaScript på en sida anropar window.moveBy(), window.moveTo(), window.resizeTo() eller window.resizeBy(). Följande exempel uppdaterar gränserna för skrivbordsfönstret: override public function set windowRect(value:Rectangle):void { htmlLoader.stage.nativeWindow.bounds = value; } Hantera JavaScript-anrop till window.open()Åsidosätt metoden createWindow() för att hantera JavaScript-anrop till window.open(). Implementeringar av metoden createWindow() används för att skapa och returnera ett nytt HTMLLoader-objekt. Vanligtvis visar du HTMLLoader i ett nytt fönster, men det är inte ett krav att skapa ett fönster. Följande exempel visar hur du ska implementera funktionen createWindow() med HTMLLoader.createRootWindow() för att skapa både fönstret och HTMLLoader-objektet. Du kan också skapa ett NativeWindow-objekt separat, och lägga till HTMLLoader till fönsterscenen. 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; } Obs! Detta exempel tilldelar den anpassade implementeringen av HTMLHost till alla nya fönster som skapas med window.open(). Du kan också använda en annan implementering eller ställa in egenskapen htmlHost till null för nya fönster, om du så önskar.
Objektet som skickas som en parameter till createWindow()-metoden är ett HTMLWindowCreateOptions-objekt. Klassen HTMLWindowCreateOptions innehåller egenskaper som rapporterar de värden som ställs in i parametersträngen features i anropet till window.open():
Klassen HTMLLoader implementerar inte alla funktioner som kan specificeras i funktionssträngen. Ditt program måste tillhandahålla rullningslister, platsfält, menyfält, statusfält och verktygsfält när det är lämpligt. Övriga argument till JavaScript-metoden window.open() hanteras av systemet. En implementering av createWindow() ska inte läsa in innehåll i HTMLLoader-objektet, eller ställa in fönstertiteln. Hantera JavaScript-anrop till window.close()Åsidosätt windowClose() för att hantera JavaScript-anrop till metoden window.close(). Följande exempel stänger skrivbordsfönstret när metoden window.close() anropas: override public function windowClose():void { htmlLoader.stage.nativeWindow.close(); } JavaScript-anrop till window.close() måste inte stänga det innehållande fönstret. Du kan till exempel ta bort HTMLLoader från visningslistan och lämna fönstret (som kan ha annat innehåll) öppet, som i följande kod: override public function windowClose():void { htmlLoader.parent.removeChild(htmlLoader); } Hantera ändringar av egenskapen window.propertyÅsidosätt metoden updateStatus() för att hantera JavaScript-ändringar av värdet för window.status. I följande exempel skrivs statusvärdet ut: override public function updateStatus(status:String):void { trace(status); } Begärd status skickas som en sträng till metoden updateStatus(). HTMLLoader-objektet innehåller inte ett statusfält. Hantera ändringar av egenskapen window.document.titleÅsidosätt metoden updateTitle() för att hantera JavaScript-ändringar av värdet för window.document.title. Följande exempel ändrar fönstertiteln och lägger till strängen ”Prov” till titeln: override public function updateTitle(title:String):void { htmlLoader.stage.nativeWindow.title = title + " - Sample"; } När document.title är inställt för en HTML-sida, skickas begärd titel som en sträng till metoden updateTitle(). Ändringar av document.title måste inte ändra titeln på det fönster som innehåller HTMLLoader-objektet. Du kan exempelvis ändra ett annat gränssnittselement, som till exempel ett textfält. Hantera JavaScript-anrop av window.blur() och window.focus()Åsidosätt metoderna windowBlur() och windowFocus() för att hantera JavaScript-anrop till metoderna window.blur() och window.focus(), som det visas i följande exempel: override public function windowBlur():void { htmlLoader.alpha = 0.5; } override public function windowFocus():void { htmlLoader.alpha = 1.0; NativeApplication.nativeApplication.activate(htmlLoader.stage.nativeWindow); } Obs! AIR innehåller inte något API för att inaktivera ett fönster eller program.
Skapa fönster med rullande HTML-innehållKlassen HTMLLoader innehåller en statisk metod, HTMLLoader.createRootWindow(), med vilken du kan öppna ett nytt fönster (som representeras av ett NativeWindow-objekt) som innehåller ett HTMLLoader-objekt och definierar några inställningar av användargränssnitt för det fönstret. Metoden tar fyra parametrar, med vilka du kan definiera användargränssnittet:
Följande kod använder till exempel metoden HTMLLoader.createRootWindow() för att skapa ett fönster med HTMLLoader-innehåll som använder rullningslister: 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(); Obs! Fönster som skapas genom att anropa createRootWindow() direkt i JavaScript, förblir oberoende av det öppnande HTML-fönstret. JavaScript-fönsteregenskaperna opener och parent är till exempel null. Om du däremot anropar createRootWindow() indirekt genom att åsidosätta HTMLHost-metoden createWindow() för att anropa createRootWindow(), refererar opener och parent till det öppnande HTML-fönstret.
|
|