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