Tworzenie okien

Adobe AIR 1.0 i starsze wersje

Środowisko AIR automatycznie tworzy pierwsze okno dla aplikacji, ale możliwe jest utworzenie dowolnych dodatkowych okien. Aby utworzyć okno macierzyste, należy użyć metody konstruktora NativeWindow.

Aby utworzyć okno HTML, należy użyć metody createRootWindow() obiektu HTMLLoader lub wywołać z poziomu dokumentu HTML metodę window.open() języka JavaScript. Utworzone okno jest obiektem NativeWindow, którego lista wyświetlania zawiera obiekt HTMLLoader. Obiekt HTMLLoader interpretuje i wyświetla treść HTML i JavaScript dla okna. Dostęp do właściwości bazowego obiektu NativeWindow można uzyskać z poziomu kodu JavaScript za pomocą właściwości window.nativeWindow . (Ta właściwość jest dostępna tylko dla kodu działającego w obszarze izolowanym aplikacji AIR).

Po inicjalizacji okna, w tym początkowego okna aplikacji, należy rozważyć utworzenie okna w stanie niewidocznym, załadowanie treści lub wykonanie dowolnych aktualizacji graficznych, a następnie zmienić stan okna na widoczny. Taka sekwencja działań chroni użytkowników przed wszelkimi nagłymi zmianami wizualnymi. Można określić, aby początkowe okno aplikacji było tworzone w stanie niewidocznym przez określenie znacznika <visible>false</visible> w deskryptorze aplikacji (lub opuszczając znacznik, ponieważ jego wartością domyślną jest false ). Obiekty NativeWindow są domyślnie niewidoczne. Po utworzeniu okna HTML za pomocą metody createRootWindow() obiektu HTMLLoader można ustawić argument visible na wartość false . Aby ustawić widoczność okna, należy wywołać metodę activate() obiektu NativeWindow lub ustawić właściwość visible na wartość true .

Określanie właściwości inicjowania okna

Właściwości inicjowania alternatywnego okna nie można zmienić po utworzeniu okna pulpitu. Stałe właściwości i ich wartości domyślne:

Właściwość

Wartość domyślna

systemChrome

standard

type

normal

transparent

false

owner

null

maximizable

true

minimizable

true

resizable

true

Właściwości należy ustawić dla początkowego okna utworzonego przez środowisko AIR w pliku deskryptora aplikacji. Główne okno aplikacji AIR jest zawsze typu normal . (Dodatkowe właściwości okna można określić w pliku deskryptora np. visible , width i height , ale te właściwości można zmienić w dowolnym momencie).

Właściwości należy ustawić dla innych rodzimych okien i okien HTML utworzonych przez aplikację za pomocą klasy NativeWindowInitOptions. Po utworzeniu okna należy przekazać obiekt NativeWindowInitOptions, określając właściwości okna w funkcji konstruktora NativeWindow lub metodzie createRootWindow() obiektu HTMLLoader.

Poniższy kod tworzy obiekt NativeWindowInitOptions dla okna typu utility:

var options:NativeWindowInitOptions = new NativeWindowInitOptions(); 
options.systemChrome = NativeWindowSystemChrome.STANDARD; 
options.type = NativeWindowType.UTILITY 
options.transparent = false; 
options.resizable = false; 
options.maximizable = false; 

Ustawienie właściwości systemChrome na wartość standard , gdy właściwość transparent o wartości true lub type o wartości lightweight nie jest obsługiwana .

Uwaga: Nie można ustawić właściwości inicjowania dla okna utworzonego za pomocą funkcji window.open() języka JavaScript. Można jednak przysłonić sposób tworzenia okien, implementując własną klasę HTMLHost. Więcej informacji zawiera sekcja Obsługa wywołań JavaScript do funkcji window.open() .

Podczas tworzenia okna za pomocą klasy mx:Window środowiska Flex należy samodzielnie określić właściwości inicjowania obiektu okna — w deklaracji MXML okna lub w kodzie, który tworzy okno. Bazowy obiekt NativeWindow zostaje utworzony dopiero po wywołaniu metody open() . Po otwarciu okna nie można zmienić właściwości inicjowania.

Tworzenie początkowego okna aplikacji

Środowisko AIR tworzy początkowe okno aplikacji w oparciu o właściwości określone w deskryptorze aplikacji i ładuje plik, do którego istnieje odwołanie w elemencie treści. Element treści musi odwoływać się do pliku SWF lub HTML.

Początkowe okno może być oknem głównym aplikacji lub może służyć po prostu do uruchamiania jednego lub większej ilości innych okien. Nie musi być ono widoczne.

Tworzenie początkowego okna za pomocą języka ActionScript

W przypadku tworzenia aplikacji AIR z użyciem języka ActionScript główna klasa aplikacji musi rozszerzać klasę Sprite (lub podklasę klasy Sprite). Klasa służy jako główny punkt wejścia dla aplikacji.

Podczas uruchamiania aplikacji środowisko AIR tworzy okno, instancję klasy głównej i dodaje instancję na stół montażowy okna. Aby uzyskać dostęp do okna, należy wykryć zdarzenie addedToStage , a następnie użyć właściwości nativeWindow obiektu Stage w celu pobrania odwołania do obiektu NativeWindow.

Poniższy przykład ilustruje podstawowy szkielet klasy głównej aplikacji AIR utworzonej za pomocą języka ActionScript:

package { 
    import flash.display.NativeWindow; 
    import flash.display.Sprite; 
    import flash.events.Event; 
 
    public class MainClass extends Sprite 
    { 
        private var mainWindow:NativeWindow; 
        public function MainClass(){ 
            this.addEventListener(Event.ADDED_TO_STAGE, initialize); 
        } 
         
        private function initialize(event:Event):void{ 
            mainWindow = this.stage.nativeWindow; 
            //perform initialization... 
            mainWindow.activate(); //show the window 
        } 
    } 
}
Uwaga: Od strony czysto technicznej MOŻLIWE jest uzyskanie dostępu do właściwości nativeWindow z konstruktora klasy głównej. Jednak jest to przypadek specjalny, który ma zastosowanie tylko w odniesieniu do początkowego okna aplikacji.

Gdy aplikacja jest tworzona w programie Flash Professional, klasa dokumentu głównego zostanie utworzona automatycznie, jeśli autor aplikacji nie utworzy własnej w odrębnym pliku ActionScript. Możliwe jest uzyskiwanie dostępu do obiektu NativeWindow okna początkowego za pośrednictwem właściwości nativeWindow stołu montażowego. Poniższy przykładowy kod aktywuje okno główne w stanie zmaksymalizowanym (z osi czasu):

import flash.display.NativeWindow; 
 
var mainWindow:NativeWindow = this.stage.nativeWindow; 
mainWindow.maximize(); 
mainWindow.activate();

Tworzenie początkowego okna za pomocą środowiska Flex

Podczas tworzenia aplikacji AIR za pomocą środowiska Flex w głównym pliku MXML jako elementu głównego należy użyć mx:WindowedApplication. (Można użyć składnika mx:Application, ale nie obsługuje on wszystkich funkcji dostępnych w środowisku AIR). Składnik WindowedApplication służy jako początkowy punkt wejścia aplikacji.

Podczas uruchamiania aplikacji, środowisko AIR tworzy rodzime okno, inicjuje środowisko Flex i dodaje obiekt WindowedApplication na stół montażowy okna. Po zakończeniu sekwencji uruchamiania, obiekt WindowedApplication wywołuje zdarzenie applicationComplete . Dostęp do obiektu okna pulpitu można uzyskać za pomocą właściwości nativeWindow instancji WindowedApplication.

Poniższy przykład tworzy prosty składnik WindowedApplication, który ustawia jego współrzędne x i y:

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"  
    applicationComplete="placeWindow()"> 
    <mx:Script> 
        <![CDATA[ 
            private function placeWindow():void{ 
                this.nativeWindow.x = 300; 
                this.nativeWindow.y = 300; 
            } 
        ]]> 
    </mx:Script> 
    <mx:Label text="Hello World" horizontalCenter="0" verticalCenter="0"/> 
</mx:WindowedApplication>

Tworzenie obiektu NativeWindow

Aby utworzyć obiekt NativeWindow, należy przekazać obiekt NativeWindowInitOptions do konstruktora NativeWindow:

var options:NativeWindowInitOptions = new NativeWindowInitOptions(); 
options.systemChrome = NativeWindowSystemChrome.STANDARD; 
options.transparent = false; 
var newWindow:NativeWindow = new NativeWindow(options); 

Okno nie zostanie wyświetlone, dopóki właściwość visible nie zostanie ustawiona na wartość true lub wywołana zostanie metoda activate() .

Po utworzeniu okna programista może inicjować jego właściwości i ładować treść do okna za pomocą właściwości stage i technik list wyświetlania Flash.

W większości przypadków właściwość scaleMode stołu montażowego nowego okna rodzimego należy ustawić na wartość noScale (w tym celu należy użyć stałej StageScaleMode.NO_SCALE ). Tryby skalowania Flash zostały zaprojektowane do obsługi sytuacji, w których autor aplikacji nie zna z wyprzedzeniem proporcji przestrzeni wyświetlania aplikacji. Tryby skalowania umożliwiają autorowi wybranie najmniej niekorzystnego kompromisu: przycięcie treści, jej rozciągnięcie lub ściśnięcie albo wypełnienie pustą przestrzenią. Ponieważ programista ma możliwość sterowania przestrzenią wyświetlania w środowisku AIR (ramka okna), możliwe jest dopasowanie rozmiaru okna do treści lub treści do okna, unikając w ten sposób kompromisu.

Tryb skalowania dla okien środowiska Flex i okien HTML ustawiany jest automatycznie na wartość noScale .

Uwaga: Aby określić maksymalny i minimalny rozmiar okna dozwolony w bieżącym systemie operacyjnym, należy użyć następujących właściwości statycznych NativeWindow:
var maxOSSize:Point = NativeWindow.systemMaxSize; 
var minOSSize:Point = NativeWindow.systemMinSize; 

Tworzenie okna HTML

Aby utworzyć okno HTML, można wywołać metodę Window.open() JavaScript lub metodę createRootWindow() klasy HTMLLoader AIR.

Treść HTML w dowolnym obszarze izolowanym zabezpieczeń może korzystać ze standardowej metody Window.open() JavaScript. Jeśli treść działa poza obszarem izolowanym aplikacji, metoda open() może zostać wywołana tylko w odpowiedzi na interakcję użytkownika np. kliknięcie myszą lub naciśnięcie klawisza. Wywołanie metody open() powoduje utworzenie okna z karnacją systemową w celu wyświetlenia treści dla określonego URL. Na przykład:

newWindow = window.open("xmpl.html", "logWindow", "height=600, width=400, top=10, left=10");
Uwaga: Programista może rozszerzyć klasę HTMLHost w kodzie ActionScript, aby dostosować okno utworzone za pomocą funkcji window.open() JavaScript. Patrz Informacje o rozszerzaniu klasy HTMLHost .

Treść w obszarze izolowanym zabezpieczeń aplikacji ma dostęp do bardziej zaawansowanej metody tworzenia okien — HTMLLoader.createRootWindow() . Za pomocą tej metody możliwe jest określenie wszystkich opcji tworzenia nowego okna. Na przykład: poniższy kod JavaScript tworzy okno typu lightweight bez karnacji systemowej o rozmiarach 300x400 pikseli:

var options = new air.NativeWindowInitOptions(); 
options.systemChrome = "none"; 
options.type = "lightweight"; 
 
var windowBounds = new air.Rectangle(200,250,300,400); 
newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds); 
newHTMLLoader.load(new air.URLRequest("xmpl.html"));
Uwaga: Jeśli treść załadowana przez nowe okno znajduje się poza obszarem izolowanym zabezpieczeń aplikacji, obiekt okna nie zawiera właściwości środowiska AIR: runtime , nativeWindow lub htmlLoader .

W przypadku utworzenia przezroczystego okna treść SWF osadzona na stronie HTML ładowanej do tego okna nie zawsze jest wyświetlana. Konieczne jest ustawienie parametru wmode obiektu lub osadzonego znacznika używanego jako odniesienie do pliku SWF na wartość opaque lub transparent . Wartością domyślną parametru wmode jest window , dlatego domyślnie treść SWF nie jest wyświetlana w oknach przezroczystych. Treści pliku PDF nie można wyświetlić w oknach przezroczystych, niezależnie od ustawionej wartości wmode . (W wersjach środowiska wykonawczego wcześniejszych niż AIR 1.5.2 treść SWF również nie mogła być wyświetlana w oknach przezroczystych.)

Okna utworzone za pomocą metody createRootWindow() pozostają niezależne w stosunku do okna, z którego zostały otwarte. Właściwości parent i opener obiektu Window języka JavaScript mają wartość null . Okno otwierające może uzyskać dostęp do obiektu Window nowego okna za pomocą odwołania HTMLLoader zwróconego przez funkcję createRootWindow() . W kontekście poprzedniego przykładu instrukcja newHTMLLoader.window będzie odwoływała się do obiektu Window języka JavaScript utworzonego okna.

Uwaga: Funkcja createRootWindow() może być wywoływana z kodu JavaScript i ActionScript.

Tworzenie wystąpienia klasy mx:Window

Aby utworzyć instancję mx:Window, należy utworzyć plik MXML z użyciem mx:Window jako głównego znacznika lub bezpośrednio wywołać konstruktor klasy Window.

Poniższy przykład tworzy i wyświetla instancję mx:Window przez wywołanie konstruktora Window:

var newWindow:Window = new Window(); 
newWindow.systemChrome = NativeWindowSystemChrome.NONE; 
newWindow.transparent = true; 
newWindow.title = "New Window"; 
newWindow.width = 200; 
newWindow.height = 200; 
newWindow.open(true);

Dodawanie zawartości do okna

Sposób dodawania zawartości do okna środowiska AIR jest uzależniony od typu okna. Na przykład języki MXML i HTML umożliwiają deklaratywne definiowanie podstawowej treści okna. Programista może osadzić zasoby w plikach aplikacji SWF lub załadować je z oddzielnych plików aplikacji. Całą zawartość Flex, Flash i HTML można tworzyć na bieżąco i dodawać do okna dynamicznie.

Podczas ładowania treści SWF lub HTML zawierającej kod JavaScript należy wziąć pod uwagę model zabezpieczeń środowiska AIR. Dowolna treść obszaru izolowanego zabezpieczeń aplikacji tj. treść zainstalowana z aplikacją i treść, którą można załadować za pomocą schematu URL app: ma wszystkie uprawnienia, aby uzyskać dostęp do interfejsów API środowiska AIR. Dowolna treść załadowana spoza tego obszaru izolowanego nie uzyska dostępu do interfejsów API środowiska AIR. Treść JavaScript spoza obszaru izolowanego aplikacji nie może używać właściwości runtime , nativeWindow lub htmlLoader obiektu Window języka JavaScript.

Aby umożliwić bezpieczne wywoływanie skryptów, można użyć mostu obszaru izolowanego w celu dostarczenia ograniczonego interfejsu między treścią aplikacji a treścią nieaplikacyjną. W treści HTML możliwe jest również odwzorowanie stron aplikacji na nieaplikacyjny obszar izolowany, aby umożliwić kodowi na stronie odwoływanie się do skryptów zewnętrznej treści. Patrz Zabezpieczenia w środowisku AIR .

Ładowanie pliku SWF lub obrazu

Pliki SWF programu Flash lub obrazy można ładować na listę wyświetlania rodzimego okna z użyciem klasy flash.display.Loader :

package { 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.net.URLRequest; 
    import flash.display.Loader; 
 
    public class LoadedSWF extends Sprite 
    { 
        public function LoadedSWF(){ 
            var loader:Loader = new Loader(); 
            loader.load(new URLRequest("visual.swf"));                    
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadFlash); 
        } 
 
        private function loadFlash(event:Event):void{ 
            addChild(event.target.loader);  
        } 
    } 
}
Uwaga: Starsze pliki SWF utworzone za pomocą ActionScript 1 lub 2 współużytkują globalne stany np. definicje klas, obiekty singleton i globalne zmienne, jeśli są ładowane do tego samego okna. Jeśli taki plik SWF w celu poprawnej pracy polega na nietkniętych stanach globalnych, nie może zostać załadowany więcej niż raz do tego samego okna, ani załadowany do tego samego okna jako inny plik SWF z użyciem przysłaniania definicji i zmiennych klasy. Ta treść może być ładowana do oddzielnych okien.

Ładowanie treści HTML do obiektu NativeWindow

Aby załadować treść HTML do obiektu NativeWindow, można dodać obiekt HTMLLoader na stół montażowy okna i załadować treść HTML do obiektu HTMLLoader lub utworzyć okno, które zawiera już obiekt HTMLLoader, za pomocą metody HTMLLoader.createRootWindow() . W poniższym przykładzie przedstawiono wyświetlanie treści HTML w obszarze wyświetlania 300 na 500 pikseli na stole montażowym rodzimego okna:

//newWindow is a NativeWindow instance 
var htmlView:HTMLLoader = new HTMLLoader(); 
htmlView.width = 300; 
htmlView.height = 500; 
 
//set the stage so display objects are added to the top-left and not scaled 
newWindow.stage.align = "TL"; 
newWindow.stage.scaleMode = "noScale"; 
newWindow.stage.addChild( htmlView ); 
 
//urlString is the URL of the HTML page to load 
htmlView.load( new URLRequest(urlString) );

Aby załadować stronę HTML do aplikacji Flex, można użyć składnika Flex HTML.

Treść SWF w pliku HTML nie jest wyświetlana, jeśli okno korzysta z przezroczystości (to jest, jeśli właściwość transparent okna ma wartość true ), chyba że parametr wmode obiektu lub osadzony znacznik stanowiący odniesienie do pliku SWF ustawiono na wartość opaque lub transparent . Ponieważ wartością domyślną wmode jest window , domyślnie treść SWF nie jest wyświetlana w oknie przezroczystym. Treść pliku PDF nie jest wyświetlana w oknie przezroczystym, niezależnie od ustawionej wartości wmode .

Ponadto ani treść SWF, ani PDF nie jest wyświetlana w przypadku skalowania czy obracania elementu sterującego HTMLLoader, ani wtedy, gdy właściwość alpha obiektu HTMLLoader zostanie ustawiona na wartość inną niż 1,0.

Dodawanie treści SWF jako nakładki okna HTML

Ponieważ okna HTML zawierają się w instancji NativeWindow, programista może dodawać obiekty wyświetlane Flash do listy wyświetlania powyżej i poniżej warstwy HTML.

Aby dodać obiekt wyświetlania powyżej warstwy HTML, należy użyć metody addChild() właściwości window.nativeWindow.stage . Metoda addChild() dodaje treść ułożoną na warstwie powyżej istniejącej treści w oknie.

Aby dodać obiekt wyświetlany poniżej warstwy HTML, należy użyć metody addChildAt() właściwości window.nativeWindow.stage , przekazując w parametrze index wartość zero. Umieszczenie obiektu w miejscu o indeksie zero powoduje przesunięcie istniejącej treści, łącznie z widoczną treścią HTML, w górę o jedną warstwę i wstawienie nowej treści na dole. Aby treść znajdująca się na dolnej warstwie strony HTML była widoczna, należy ustawić właściwość paintsDefaultBackground obiektu HTMLlLoader na wartość false . Ponadto wszystkie elementy strony, dla których ustawiony został kolor tła, nie będą przezroczyste. Jeśli na przykład dla treści strony ustawiony został kolor tła, żadna część strony nie będzie przezroczysta.

Poniższy przykład ilustruje sposób dodawania obiektów wyświetlanych Flash jako nakładek i podkładek dla strony HTML. Poniższy przykład tworzy dwa proste obiekty kształtu — jeden dodawany jest pod treść HTML, drugi nad nią. Przykład aktualizuje również położenie kształtu w oparciu o zdarzenie enterFrame .

<html> 
<head> 
<title>Bouncers</title> 
<script src="AIRAliases.js" type="text/javascript"></script> 
<script language="JavaScript" type="text/javascript"> 
air.Shape = window.runtime.flash.display.Shape; 
 
function Bouncer(radius, color){ 
    this.radius = radius; 
    this.color = color; 
 
    //velocity  
    this.vX = -1.3; 
    this.vY = -1; 
 
    //Create a Shape object and draw a circle with its graphics property 
    this.shape = new air.Shape();     
    this.shape.graphics.lineStyle(1,0); 
    this.shape.graphics.beginFill(this.color,.9); 
    this.shape.graphics.drawCircle(0,0,this.radius); 
    this.shape.graphics.endFill(); 
     
    //Set the starting position 
    this.shape.x = 100; 
    this.shape.y = 100; 
 
 
    //Moves the sprite by adding (vX,vY) to the current position 
    this.update = function(){ 
        this.shape.x += this.vX; 
        this.shape.y += this.vY; 
         
        //Keep the sprite within the window 
        if( this.shape.x - this.radius < 0){  
            this.vX = -this.vX; 
        } 
        if( this.shape.y - this.radius < 0){ 
            this.vY = -this.vY; 
        } 
        if( this.shape.x  + this.radius > window.nativeWindow.stage.stageWidth){ 
            this.vX = -this.vX; 
        } 
        if( this.shape.y  + this.radius > window.nativeWindow.stage.stageHeight){ 
            this.vY = -this.vY; 
        } 
         
    }; 
} 
 
function init(){ 
    //turn off the default HTML background 
    window.htmlLoader.paintsDefaultBackground = false; 
    var bottom = new Bouncer(60,0xff2233); 
    var top = new Bouncer(30,0x2441ff); 
 
    //listen for the enterFrame event 
    window.htmlLoader.addEventListener("enterFrame",function(evt){ 
        bottom.update(); 
        top.update(); 
    }); 
     
    //add the bouncing shapes to the window stage 
    window.nativeWindow.stage.addChildAt(bottom.shape,0); 
    window.nativeWindow.stage.addChild(top.shape); 
} 
</script> 
<body onload="init();"> 
<h1>de Finibus Bonorum et Malorum</h1> 
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium 
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis 
et quasi architecto beatae vitae dicta sunt explicabo.</p> 
<p style="background-color:#FFFF00; color:#660000;">This paragraph has a background color.</p> 
<p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis 
praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias 
excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui 
officia deserunt mollitia animi, id est laborum et dolorum fuga.</p> 
</body> 
</html>

Ten przykład zawiera ogólne wprowadzenie do niektórych zaawansowanych technik, które zacierają granice między językami JavaScript i ActionScript w środowisku AIR. Jeśli użytkownik nie jest zaznajomiony z obsługą obiektów wyświetlanych ActionScript, należy zapoznać się z sekcją Programowanie wyświetlania podręcznika ActionScript 3.0 — Podręcznik dla programistów .

Przykład: tworzenie rodzimego okna

Poniższy przykład ilustruje, w jaki sposób utworzyć rodzime okno:

public function createNativeWindow():void { 
    //create the init options 
    var options:NativeWindowInitOptions = new NativeWindowInitOptions(); 
    options.transparent = false; 
    options.systemChrome = NativeWindowSystemChrome.STANDARD; 
    options.type = NativeWindowType.NORMAL; 
     
    //create the window 
    var newWindow:NativeWindow = new NativeWindow(options); 
    newWindow.title = "A title"; 
    newWindow.width = 600; 
    newWindow.height = 400; 
     
    newWindow.stage.align = StageAlign.TOP_LEFT; 
    newWindow.stage.scaleMode = StageScaleMode.NO_SCALE; 
 
    //activate and show the new window 
    newWindow.activate(); 
}