Vensters maken

Adobe AIR 1.0 of hoger

AIR maakt automatisch het eerste venster voor een toepassing, maar u kunt zelf alle extra vensters maken die u nodig hebt. Als u een native venster wilt maken, gebruikt u de constructormethode NativeWindow.

Als u een HTML-venster wilt maken, gebruikt u de HTMLLoader-methode createRootWindow() of roept u vanuit een HTML-document de JavaScript-methode window.open() op. Het venster dat is gemaakt is een NativeWindow-object met een HTMLLoader-object in de weergavelijst. Het HTMLLoader-object interpreteert de HTML- en JavaScript-inhoud voor het venster en geeft deze weer. U hebt toegang tot de eigenschappen van het onderliggende NativeWindow-object vanuit JavaScript met behulp van de eigenschap window.nativeWindow . (Deze eigenschap is alleen toegankelijk voor code die wordt uitgevoerd in de sandbox van de AIR-toepassing.)

Wanneer u een venster initialiseert (inclusief het startvenster van de toepassing), zou u het venster eerst in de onzichtbare status kunnen maken, zodat de inhoud wordt geladen en eventuele grafische updates kunnen worden uitgevoerd, voordat u het venster zichtbaar maakt. Door deze volgorde aan te houden voorkomt u dat schokkerige visuele wijzigingen worden weergegeven aan uw gebruikers. U kunt aangeven dat het startvenster van uw toepassing moet worden gemaakt in de onzichtbare status door de tag <visible>false</visible> aan te geven in de toepassingsdescriptor (of door de tag weg te laten, aangezien false de standaardwaarde is). Nieuwe NativeWindows zijn standaard onzichtbaar. Wanneer u een HTML-venster maakt met de methode HTMLLoader createRootWindow() , kunt u het argument visible instellen op de waarde false . Roep de methode NativeWindow activate() aan of stel de eigenschap visible in op de waarde true om een venster zichtbaar te maken.

Initialisatie-eigenschappen voor vensters opgeven

De initialisatie-eigenschappen van een native venster kunnen niet worden gewijzigd nadat het bureaubladvenster is gemaakt. De volgende tabel bevat deze onveranderbare eigenschappen en hun standaardwaarden:

Eigenschap

Standaardwaarde

systemChrome

standard

type

normal

transparent

false

owner

null

maximizable

true

minimizable

true

resizable

true

U kunt de eigenschappen voor het beginvenster dat door AIR wordt gemaakt, in het descriptorbestand van de toepassing instellen. Het hoofdvenster van een AIR-toepassing is altijd van het type normal . (Er kunnen ook extra venstereigenschappen worden opgegeven in het descriptorbestand, zoals visible , width en height , maar deze eigenschappen kunnen op elk gewenst moment worden gewijzigd.)

De eigenschappen voor andere native vensters en HTML-vensters die door uw toepassing zijn gemaakt, kunt u instellen met de klasse NativeWindowInitOptions. Wanneer u een venster maakt, moet u een NativeWindowInitOptions-object waarin de venstereigenschappen zijn opgegeven, doorgeven aan de constructorfunctie NativeWindow of de HTMLLoader-methode createRootWindow() .

Met de volgende code maakt u een NativeWindowInitOptions-object voor een utiliteitsvenster:

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

U kunt systemChrome niet instellen op standard wanneer transparent is ingesteld op true of type is ingesteld op lightweight .

Opmerking: U kunt voor een venster dat is gemaakt met de JavaScript-functie window.open() geen initialisatie-eigenschappen instellen. U kunt de manier waarop deze vensters zijn gemaakt, echter negeren door uw eigen HTMLHost-klasse te implementeren. Zie JavaScript-oproepen van window.open() afhandelen voor meer informatie.

Wanneer u een venster maakt met de Flex-klasse mx:Window, geeft u de initialisatie-eigenschappen op in het vensterobject zelf, in de MXML-declaratie van het venster of in de code waarmee het venster wordt gemaakt. Het onderliggende NativeWindow-object wordt pas gemaakt wanneer u de methode open() aanroept. Als een venster eenmaal is geopend, kunnen deze initialisatie-eigenschapen niet meer worden gewijzigd.

Het beginvenster van een toepassing maken

AIR maakt het beginvenster van de toepassing op basis van de eigenschappen die zijn opgegeven in de toepassingsdescriptor en laadt het bestand waarnaar wordt verwezen in het element content. Het content-element moet verwijzen naar een SWF- of HTML-bestand.

Het beginvenster kan het hoofdvenster van uw toepassing zijn, maar het kan ook alleen maar worden gebruikt om een of meer andere vensters te starten. U hoeft dit beginvenster niet zichtbaar te maken.

Het beginvenster maken met ActionScript

Als u een AIR-toepassing maakt met behulp van ActionScript, moet de hoofdklasse van uw toepassing de Sprite-klasse (of een subklasse van Sprite) uitbreiden. Deze klasse fungeert als primair toegangspunt voor de toepassing.

Wanneer uw toepassing wordt gestart, maakt AIR eerst een venster en vervolgens een hoofdklasse-instantie die aan het werkgebied van het venster wordt toegevoegd. U kunt toegang krijgen tot het venster door te luisteren naar de gebeurtenis addedToStage en vervolgens de eigenschap nativeWindow van het Stage-object te gebruiken om een verwijzing naar het NativeWindow-object te verkrijgen.

In het volgende voorbeeld wordt het elementaire geraamte getoond voor de hoofdklasse van een AIR-toepassing die met ActionScript is gebouwd:

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 
        } 
    } 
}
Opmerking: Technisch gezien KUNT u toegang krijgen tot de eigenschap nativeWindow in de constructorfunctie van de hoofdklasse. Dit is echter alleen mogelijk in het beginvenster van de toepassing.

Als u een toepassing in Flash Professional maakt, wordt de hoofddocumentklasse automatisch gemaakt als u er zelf geen hebt gemaakt in een afzonderlijk ActionScript-bestand. U hebt toegang tot het NativeWindow-object voor het beginvenster met behulp van de eigenschap nativeWindow van het werkgebied. Met de volgende code bijvoorbeeld kunt u het hoofdvenster op maximumgrootte openen (van de tijdlijn):

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

Het beginvenster maken met Flex

Wanneer u een AIR-toepassing maakt met het Flex-framework, moet u mx:WindowedApplication gebruiken als het hoofdelement van uw belangrijkste MXML-bestand. (U kunt de component mx:Application gebruiken, maar deze ondersteunt niet alle functies die beschikbaar zijn in AIR.) De component WindowedApplication fungeert als primair toegangspunt voor de toepassing.

Wanneer u de toepassing start, wordt door AIR een native venster gemaakt, het Flex-framework geïnitialiseerd en het object WindowedApplication toegevoegd aan het werkgebied van het venster. Wanneer de startreeks is voltooid, verzendt de WindowedApplication de gebeurtenis applicationComplete . U kunt toegang krijgen tot het bureaubladvensterobject met de eigenschap nativeWindow van de WindowedApplication-instantie.

In het volgende voorbeeld wordt een eenvoudige WindowedApplication-component gemaakt waarmee de x- en y-coördinaat van de component worden ingesteld:

<?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>

NativeWindows maken

Als u een NativeWindow wilt maken, geeft u een NativeWindowInitOptions-object door aan de NativeWindow-constructor:

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

Het venster wordt pas weergegeven nadat u de eigenschap visible op true hebt ingesteld of de methode activate() hebt aangeroepen.

Als het venster eenmaal is gemaakt, kunt u de eigenschappen van het venster initialiseren en inhoud in het venster laden met de eigenschap Stage en de Flash-technieken voor weergavelijsten.

In vrijwel alle gevallen kunt u de eigenschap scaleMode van het werkgebied van een nieuw native venster het best instellen op noScale (gebruik de constante StageScaleMode.NO_SCALE ). De schaalmodi van Flash zijn ontworpen voor situaties waarin de auteur van de toepassing niet van tevoren weet wat de hoogte-breedteverhouding van het weergavegebied voor de toepassing zal zijn. Met de schaalmodi kan de auteur het minst slechte compromis kiezen: de inhoud bijsnijden, uitrekken of samenduwen, of omgeven met lege ruimte. Omdat u de weergaveruimte in AIR (het vensterframe) zelf kunt bepalen, kunt u het formaat van het venster aanpassen aan de inhoud of de inhoud aanpassen aan het venster zonder compromissen te sluiten.

De schaalmodus voor Flex- en HTML-vensters wordt automatisch ingesteld op noScale .

Opmerking: Als u wilt bepalen wat de maximum- en minimumgrootte van een venster is in het huidige besturingssysteem, gebruikt u de volgende statische NativeWindow-eigenschappen:
var maxOSSize:Point = NativeWindow.systemMaxSize; 
var minOSSize:Point = NativeWindow.systemMinSize; 

HTML-vensters maken

Als u een HTML-venster wilt maken, kunt u de JavaScript-methode Window.open() of de methode createRootWindow() van de AIR-klasse HTMLLoader aanroepen.

Voor HTML-inhoud in een willekeurige beveiligingssandbox kan de standaard JavaScript-methode Window.open() worden gebruikt. Als de inhoud buiten de toepassingssandbox wordt uitgevoerd, kan de methode open() alleen worden aangeroepen als reactie op een handeling van de gebruiker, zoals het klikken met de muis of het indrukken van een toets. Wanneer open() wordt aangeroepen, wordt er een venster met het systeemchroom gemaakt waarin de inhoud van de opgegeven URL wordt weergegeven. Bijvoorbeeld:

newWindow = window.open("xmpl.html", "logWindow", "height=600, width=400, top=10, left=10");
Opmerking: U kunt de klasse HTMLHost in ActionScript uitbreiden om het venster dat met de JavaScript-functie window.open() is gemaakt, naar wens aan te passen. Zie Informatie over het uitbreiden van de klasse HTMLHost .

Inhoud in de beveiligingssandbox van de toepassing heeft toegang tot de methode HTMLLoader.createRootWindow() , die meer mogelijkheden biedt bij het maken van vensters. Met deze methode kunt u alle opties voor het maken van een nieuw venster zelf opgeven. Met de volgende JavaScript-code maakt u bijvoorbeeld een lichtgewichtvenster zonder systeemchroom, dat 300 x 400 pixels groot is:

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"));
Opmerking: als de inhoud die wordt geladen door een nieuw venster, zich buiten de beveiligingssandbox van de toepassing bevindt, zijn de volgende AIR-eigenschappen niet beschikbaar voor het vensterobject: runtime , nativeWindow en htmlLoader .

Als u een transparant venster maakt, wordt de SWF-inhoud die is ingesloten in de HTML-bestanden opgeslagen en die in dat venster wordt geladen, niet altijd weergegeven. U dient de parameter wmode van het object of de insluitmarkering waarmee u naar het SWF-bestand verwijst, instellen op opaque of transparent . De standaardwaarde van wmode is window en daarom wordt SWF-inhoud standaard niet weergegeven in transparante vensters. PDF-inhoud kan niet worden weergegeven in transparante vensters, ongeacht de waarde die voor wmode wordt ingesteld. (Vóór AIR 1.5.2 kon SWF-inhoud ook niet worden weergegeven in transparante vensters.)

Vensters die zijn gemaakt met de methode createRootWindow() , blijven onafhankelijk van het openingsvenster. De eigenschappen parent en opener van het JavaScript-object Window zijn ingesteld op null . Het openingsvenster heeft toegang tot het Window-object van het nieuwe venster met behulp van de HTMLLoader-verwijzing, die is geretourneerd door de functie createRootWindow() . In de context van het vorige voorbeeld wordt met de instructie newHTMLLoader.window verwezen naar het JavaScript-object Window van het gemaakte venster.

Opmerking: De functie createRootWindow() kan zowel vanuit JavaScript als vanuit ActionScript worden aangeroepen.

Een mx:Window maken

Als u een mx:Window wilt maken, kunt u een MXML-bestand met mx:Window als hoofdtag maken, of u kunt de klasseconstructor Window rechtstreeks aanroepen.

Het volgende voorbeeld maakt en toont een mx:Window door de constructor Window aan te roepen:

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);

Inhoud toevoegen aan een venster

Hoe u inhoud toevoegt aan een AIR-venster hangt af van het type venster. In MXML en HTML bijvoorbeeld kunt u de basisinhoud van het venster declaratief definiëren. U kunt resources insluiten in de SWF-bestanden van de toepassing of u kunt deze laden uit afzonderlijke toepassingsbestanden. Flex-, Flash- en HTML-inhoud kan op elk gewenst moment worden gemaakt en dynamisch aan een venster worden toegevoegd.

Wanneer u SWF-inhoud laadt, of HTML-inhoud die JavaScript bevat, moet u rekening houden met het beveiligingsmodel van AIR. Alle inhoud in de beveiligingssandbox van de toepassing, dat wil zeggen de inhoud die met uw toepassing is geïnstalleerd en kan worden geladen met het schema app: URL, heeft alle benodigde rechten om toegang te krijgen tot alle API's van AIR. Inhoud die van buiten deze sandbox wordt geladen, heeft geen toegang tot de API's van AIR. JavaScript-inhoud buiten de toepassingssandbox kan de eigenschappen runtime , nativeWindow en htmlLoader van het JavaScript-object Window niet gebruiken.

Voor veilige cross-scripting kunt u een sandboxbridge gebruiken om een beperkte interface te bieden tussen toepassingsinhoud en niet-toepassingsinhoud. In HTML-inhoud kunt u ook pagina's van uw toepassing aan een niet-toepassingssandbox toewijzen om de code op die pagina's de mogelijkheid van cross-scripting met externe inhoud te bieden. Zie Beveiliging in AIR .

Een SWF-bestand of -afbeelding laden

Met de klasse flash.display.Loader kunt u Flash SWF-bestanden of -afbeeldingen laden in de weergavelijst van een native venster:

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);  
        } 
    } 
}
Opmerking: Oudere SWF-bestanden die zijn gemaakt met ActionScript 1 of 2, delen globale statussen, zoals klassedefinities, singletons en globale variabelen, als deze in hetzelfde venster worden geladen. Als een dergelijk SWF-bestand alleen goed kan werken als de globale statussen ongewijzigd zijn, kan het bestand niet meer dan één keer in hetzelfde venster worden geladen. Het bestand kan in dat geval ook niet worden geladen in een venster waarin zich een ander SWF-bestand bevindt dat gebruikmaakt van overlappende klassedefinities en variabelen. Deze inhoud kan in aparte vensters worden geladen.

HTML-inhoud in een NativeWindow laden

Als u HTML-inhoud in een NativeWindow wilt laden, kunt u een HTMLLoader-object aan het werkgebied van het venster toevoegen en de HTML-inhoud in de HTMLLoader laden, of een venster maken dat al een HTMLLoader-object bevat met de methode HTMLLoader.createRootWindow() . In het volgende voorbeeld wordt HTML-inhoud weergegeven binnen een weergavegebied van 300 x 500 pixels op het werkgebied van een native venster:

//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) );

Als u een HTML-pagina in een Flex-toepassing wilt laden, kunt u de HTML-component van Flex gebruiken.

SWF-inhoud in een HTML-bestand wordt niet weergegeven als het venster transparantie gebruikt (dat wil zeggen wanneer de eigenschap transparent van het venster is ingesteld op true ), tenzij de parameter wmode van het object of de insluitmarkering waarmee naar het SWF-bestand wordt verwezen, is ingesteld op opaque of transparent . De standaardwaarde voor wmode is window en daarom wordt SWF-inhoud standaard niet weergegeven in transparante vensters. PDF-inhoud wordt niet weergegeven in transparante vensters, ongeacht de waarde die voor wmode wordt gebruikt.

Bovendien wordt noch SWF-, noch PDF-inhoud weergegeven als het besturingselement HTMLLoader is geschaald of geroteerd of als de alpha -eigenschap van HTMLLoader is ingesteld op een andere waarde dan 1.0.

SWF-inhoud toevoegen als laag boven op een HTML-venster

Omdat HTML-vensters zich binnen een NativeWindow-instantie bevinden, kunt u zowel boven als onder de HTML-laag in de weergavelijst Flash-weergaveobjecten toevoegen.

Als u een weergaveobject boven de HTML-laag wilt toevoegen, moet u de methode addChild() van de eigenschap window.nativeWindow.stage gebruiken. Met de methode addChild() voegt u inhoud toe als een laag boven alle bestaande inhoud in het venster.

Als u een weergaveobject onder de HTML-laag wilt toevoegen, moet u de methode addChildAt() van de eigenschap window.nativeWindow.stage gebruiken, waarbij u de waarde nul doorgeeft voor de parameter index . Als u een object op de nulindex plaatst, wordt bestaande inhoud, inclusief de HTML-weergave, één laag hoger geplaatst en wordt de nieuwe inhoud helemaal onderaan ingevoegd. Als u wilt dat inhoud op lagen onder de HTML-pagina zichtbaar is, moet u de eigenschap paintsDefaultBackground van het object HTMLlLoader op false instellen. Bovendien zijn elementen op de pagina waarvoor een achtergrondkleur is ingesteld, niet transparant. Als u bijvoorbeeld een achtergrondkleur instelt voor het hoofdtekstelement van de pagina, is geen enkel onderdeel van de pagina transparant.

In het volgende voorbeeld ziet u hoe u Flash-weergaveobjecten als lagen boven en onder de HTML-pagina kunt toevoegen. Met dit voorbeeld maakt u twee eenvoudige vormobjecten, en plaatst u het ene object boven en het andere onder de HTML-inhoud. In dit voorbeeld wordt ook de positie van de vorm bijgewerkt op basis van de gebeurtenis 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>

In dit voorbeeld wordt een elementaire inleiding gegeven op bepaalde geavanceerde technieken waarbij de grenzen tussen JavaScript en ActionScript in AIR worden overschreden. Als u niet bekend bent met het gebruik van ActionScript-weergaveobjecten, raadpleegt u Weergave programmeren in de ActionScript® 3.0-ontwikkelaarsgids .

Voorbeeld: een native venster maken

In het volgende voorbeeld ziet u hoe u een native venster kunt maken:

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(); 
}