Hur du lägger till innehåll i ett AIR-fönster beror på fönstrets typ. Med exempelvis MXML och HTML kan du definiera fönstrets grundläggande innehåll med hjälp av en deklaration. Du kan bygga in resurser i programmets SWF-filer eller läsa in dem från separata programfiler. Flex-, Flash- och HTML-innehåll kan skapas direkt och läggas till dynamiskt i ett fönster.
När du läser in SWF-innehåll, eller HTML-innehåll som innehåller JavaScript, måste du ta hänsyn till säkerhetsmodellen i AIR. Allt innehåll i programmets säkerhetssandlåda, alltså innehåll som har installerats med programmet och kan läsas in med schemat app: URL, har fullständig åtkomst till alla API:er i AIR. Innehåll som läses in från en plats utanför den här säkerhetssandlådan har inte åtkomst till API:erna i AIR. JavaScript-innehåll utanför programmets säkerhetssandlåda kan inte använda egenskaperna
runtime
,
nativeWindow
eller
htmlLoader
för JavaScript-objektet Window.
Du kan möjliggöra säker korsskriptning genom att använda en sandlådebrygga som tillhandahåller ett begränsat gränssnitt mellan innehåll i och utanför programmet. I HTML-innehåll kan du också mappa sidor från programmet till en säkerhetssandlåda utanför programmet, så att korsskriptning med externt innehåll kan utföras för koden på sidorna. Se även
AIR-säkerhet
.
Läsa in en SWF-fil eller bild
Du kan läsa in Flash SWF-filer eller bilder till ett inbyggt fönsters visningslista med klassen
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);
}
}
}
Obs!
Äldre SWF-filer som har skapats med ActionScript 1 eller 2 delar globala tillstånd som klassdefinitioner, singleton-objekt och globala variabler om de läses in i samma fönster. Om en sådan SWF-fil är beroende av oförändrade globala tillstånd för att fungera korrekt går det inte att läsa in den mer än en gång i samma fönster. Det går inte heller att läsa in den i samma fönster som en annan SWF-fil som använder överlappande klassdefinitioner och variabler. Det här innehållet kan läsas in i separata fönster.
Läsa in HTML-innehåll i en NativeWindow-instans
Om du vill läsa in HTML-innehåll i en NativeWindow-instans kan du antingen lägga till ett HTMLLoader-objekt på fönsterscenen och läsa in HTML-innehållet i HTMLLoader-objektet eller skapa ett fönster som redan innehåller ett HTMLLoader-objekt genom att använda metoden
HTMLLoader.createRootWindow()
. I följande exempel visas HTML-innehåll i ett visningsområde på 300×500 pixlar på scenen för ett inbyggt fönster:
//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) );
Om du vill läsa in en HTML-sida i ett Flex-program kan du använda HTML-komponenten för Flex.
SWF-innehåll i en HTML-fil visas inte om genomskinlighet används för fönstret (egenskapen
transparent
för fönstret är
true)
såvida parametern
wmode
för objektet eller den inbäddade taggen som används som referens för SWF-filen inte är inställd på antingen
opaque
eller
transparent
. Eftersom standardvärdet för
wmode
är
window
visas som standard inte SWF-innehåll i ett genomskinligt fönster. PDF-innehåll visas inte i ett genomskinligt fönster oavsett vilket
wmode
-värde som används.
Varken SWF- eller PDF-innehåll visas om HTMLLoader-kontrollen är skalad eller roterad, eller om egenskapen
alpha
är inställd på ett annat värde än 1.0.
Lägga till SWF-innehåll som ett överlägg i ett HTML-fönster
Eftersom HTML-fönster är innehåll i en NativeWindow-instans kan du lägga till Flash-visningsobjekt både över och under HTML-lagret i visningslistan.
Om du vill lägga till en visningsobjekt över HTML-lagret använder du metoden
addChild()
för egenskapen
window.nativeWindow.stage
. Metoden
addChild()
lägger till innehåll i lager över befintligt innehåll i fönstret.
Om du vill lägga till en visningsobjekt under HTML-lagret använder du metoden
addChildAt()
för egenskapen
window.nativeWindow.stage
och skickar värdet noll för parametern
index
. När ett objekt placeras vid indexvärdet noll flyttas befintligt innehåll, inklusive HTML-visningen, ett lager uppåt och nytt innehåll infogas längst ned. För att innehåll i lager under HTML-sidan ska synas måste du ange egenskapen
paintsDefaultBackground
för objektet
HTMLlLoader
till
false
. Dessutom kommer inga element på sidan för vilken en bakgrundsfärg har angetts att vara genomskinliga. Om du exempelvis anger en bakgrundsfärg för sidans body-element kommer ingen del av sidan att vara genomskinlig.
I följande exempel illustreras hur du lägger till Flash-visningsobjekt som överlägg och underlägg på en HTML-sida. I exemplet skapas två enkla Shape-objekt, varav det ena läggs till under HTML-innehållet och det andra över. I exemplet uppdateras även Shape-placeringen baserat på händelsen
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>
I det här exemplet ges en grundläggande introduktion till några avancerade tekniker som överträder gränserna mellan JavaScript och ActionScript i AIR. Om du är obekant med att använda visningsobjekt i ActionScript, se
Visningsprogrammering
i
Utvecklarhandbok för ActionScript 3.0
.