AIR 윈도우에 내용을 추가하는 방법은 윈도우 유형에 따라 달라집니다. 예를 들어 MXML 및 HTML을 사용하면 윈도우의 기본 내용을 선언적으로 정의할 수 있습니다. 응용 프로그램 SWF 파일에 리소스를 포함하거나 별도의 응용 프로그램 파일에서 리소스를 로드할 수 있습니다. Flex, Flash 및 HTML 내용은 모두 즉석에서 만들어 윈도우에 동적으로 추가할 수 있습니다.
SWF 내용이나 JavaScript가 포함된 HTML 내용을 로드할 때 AIR 보안 모델을 고려해야 합니다. 응용 프로그램 보안 샌드박스의 내용, 즉 응용 프로그램과 함께 설치되고 app: URL 스킴으로 로드 가능한 내용은 모든 AIR API에 액세스할 수 있는 전체 권한을 가집니다. 이 샌드박스 밖에서 로드된 내용은 AIR API에 액세스할 수 없습니다. 응용 프로그램 샌드박스 밖의 JavaScript 내용은 JavaScript Window 객체의
runtime
,
nativeWindow
또는
htmlLoader
속성을 사용할 수 없습니다.
안전한 크로스 스크립팅을 허용하려면 샌드박스 브리지를 사용하여 응용 프로그램 내용과 비 응용 프로그램 내용 간의 제한된 인터페이스를 제공할 수 있습니다. HTML 내용에서 응용 프로그램의 페이지를 비 응용 프로그램 샌드박스에 매핑하여 해당 페이지의 코드에서 외부 내용의 크로스 스크립팅을 허용할 수도 있습니다. 자세한 내용은
AIR 보안
을 참조하십시오.
SWF 파일 또는 이미지 로드
flash.display.Loader
클래스를 사용하여 Flash SWF 파일 또는 이미지를 기본 윈도우의 표시 목록에 로드할 수 있습니다.
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);
}
}
}
참고:
ActionScript 1 또는 2를 사용하여 만든 이전 SWF 파일은 동일한 윈도우에 로드된 경우 클래스 정의, singleton 및 전역 변수와 같은 전역 상태를 공유합니다. 이러한 SWF 파일이 제대로 작동하려면 전역 상태가 변경되지 않아야 하는 경우 이러한 파일을 동일한 윈도우에 두 번 이상 로드하거나 겹치는 클래스 정의와 변수를 사용하여 다른 SWF 파일과 동일한 윈도우에 로드할 수 없습니다. 이 내용은 별도의 윈도우에 로드할 수 있습니다.
NativeWindow에 HTML 내용 로드
HTML 내용을 NativeWindow에 로드하려면 HTMLLoader 객체를 윈도우 스테이지에 추가하고 HTML 내용을 HTMLLoader에 로드하거나,
HTMLLoader.createRootWindow()
메서드를 사용하여 HTMLLoader 객체가 이미 포함된 윈도우를 만들 수 있습니다. 다음 예제에서는 기본 윈도우 스테이지의 300x500 픽셀 표시 영역에서 HTML 내용을 표시합니다.
//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) );
HTML 페이지를 Flex 응용 프로그램에 로드하려면 Flex HTML 구성 요소를 사용할 수 있습니다.
윈도우에서 투명도를 사용하는 경우(즉, 윈도우의
transparent
속성이
true
인 경우) 객체의
wmode
매개 변수나 SWF 파일을 참조하는 데 사용되는 embed 태그를
opaque
또는
transparent
로 설정하지 않으면 HTML 파일의 SWF 내용이 표시되지 않습니다. 기본
wmode
값은
window
이므로 기본적으로 SWF 내용은 투명 윈도우에 표시되지 않습니다. PDF 내용은 어떤
wmode
값을 사용하더라도 투명 윈도우에 표시되지 않습니다.
또한 HTMLLoader 컨트롤이 크기 조절 또는 회전되거나 HTMLLoader
alpha
속성이 1.0 이외의 값으로 설정되는 경우에는 SWF 내용과 PDF 내용이 모두 표시되지 않습니다.
HTML 윈도우에서 오버레이로 SWF 내용 추가
HTML 윈도우가 NativeWindow 인스턴스에 포함되기 때문에 Flash 표시 객체를 표시 목록에서 HTML 레이어 위와 아래에 모두 추가할 수 있습니다.
표시 객체를 HTML 레이어 위에 추가하려면
window.nativeWindow.stage
속성의
addChild()
메서드를 사용합니다.
addChild()
메서드는 윈도우에서 기존 내용 위에 레이어로 내용을 추가합니다.
HTML 레이어 아래에 표시 객체를 추가하려면
window.nativeWindow.stage
속성의
addChildAt()
메서드를 사용하여
index
매개 변수에 0 값을 전달합니다. 객체를 인덱스 0에 배치하면 HTML 표시가 포함된 기존 내용이 한 레이어 위로 이동하고 새 내용이 맨 아래에 삽입됩니다. HTML 페이지 아래에 있는 레이어의 내용이 표시되려면
HTMLlLoader
객체의
paintsDefaultBackground
속성을
false
로 설정해야 합니다. 또한 배경색을 설정하는 페이지의 모든 요소가 투명하게 표시되지 않습니다. 예를 들어 페이지의 body 요소에 대한 배경색을 설정하는 경우 페이지가 모두 투명하게 표시되지 않습니다.
다음 예제에서는 Flash 표시 객체를 오버레이로 추가하고 HTML 페이지 아래에 삽입하는 방법을 보여 줍니다. 이 예제에서는 두 가지 간단한 모양 객체를 만들어 그 중 하나를 HTML 내용 아래에 추가하고 다른 하나를 위에 추가합니다. 또한
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>
이 예제에서는 AIR의 ActionScript와 JavaScript 간 경계를 넘는 고급 방법에 대한 기본적인 내용을 소개합니다. ActionScript 표시 객체 사용 방법에 익숙하지 않은 경우
디스플레이 프로그래밍
(
ActionScript 3.0 개발자 안내서
)을 참조하십시오.