내용 로드

Flash Player 9 이상, Adobe AIR 1.0 이상

Flash Player 및 AIR 내용은 다음과 같은 여러 유형의 내용을 로드할 수 있습니다.

  • SWF 파일

  • 이미지

  • 사운드

  • 비디오

  • HTML 파일(AIR에만 해당)

  • JavaScript(AIR에만 해당)

Loader 클래스로 SWF 파일 및 이미지 로드

Loader 클래스를 사용하여 SWF 파일 및 이미지(JPG, GIF, 또는 PNG 파일)를 로드할 수 있습니다. local-with-filesystem 샌드박스에 있는 SWF 파일을 제외한 모든 SWF 파일에서는 모든 네트워크 도메인에 있는 SWF 파일과 이미지를 로드할 수 있습니다. 로컬 샌드박스의 SWF 파일만 로컬 파일 시스템의 SWF 파일과 이미지를 로드할 수 있습니다. 하지만 local-with-networking 샌드박스에 있는 파일은 local-trusted 또는 local-with-networking 샌드박스에 있는 로컬 SWF 파일만 로드할 수 있습니다. local-with-networking 샌드박스에 있는 SWF 파일은 이미지와 같이 SWF 파일이 아닌 로컬 내용을 로드할 수 있지만 로드된 내용의 데이터에는 액세스할 수 없습니다.

신뢰할 수 없는 소스(예: Loader 객체의 루트 SWF 파일에 대한 도메인이 아닌 도메인)에서 SWF 파일을 로드하는 경우, 다음 코드와 같이 Loader 객체의 마스크를 정의하여 해당 마스크의 바깥쪽 스테이지 부분에 로드된 내용(Loader 객체의 자식)을 그릴 수 없도록 할 수 있습니다.

import flash.display.*; 
import flash.net.URLRequest; 
var rect:Shape = new Shape(); 
rect.graphics.beginFill(0xFFFFFF); 
rect.graphics.drawRect(0, 0, 100, 100); 
addChild(rect); 
var ldr:Loader = new Loader(); 
ldr.mask = rect; 
var url:String = "http://www.unknown.example.com/content.swf"; 
var urlReq:URLRequest = new URLRequest(url); 
ldr.load(urlReq); 
addChild(ldr);

Loader 객체의 load() 메서드를 호출하는 경우에는 LoaderContext 객체인 context 매개 변수를 지정할 수 있습니다. LoaderContext 클래스에는 로드된 내용을 사용하는 방법에 대한 컨텍스트를 정의할 수 있는 세 가지 속성이 포함되어 있습니다.

  • checkPolicyFile : 이 속성은 SWF 파일이 아닌 이미지 파일을 로드할 때만 사용합니다. Loader 객체를 포함하는 파일의 도메인을 제외한 도메인의 이미지 파일에 대해 이 속성을 정의합니다. 이 속성을 true 로 설정하면 Loader는 원래 서버에서 URL 정책 파일을 확인합니다( 웹 사이트 컨트롤(정책 파일) 참조). 서버에서 Loader 도메인에 대한 권한을 부여하면 Loader 도메인에 있는 SWF 파일의 ActionScript에서 로드된 이미지의 데이터에 액세스할 수 있습니다. 즉, Loader.content 속성을 사용하여 로드된 이미지를 나타내는 Bitmap 객체나, 로드된 이미지의 픽셀에 액세스하는 BitmapData.draw() 또는 BitmapData.drawWithQuality() 메서드에 대한 참조를 가져올 수 있습니다. drawWithQuality 메서드는 Flash Player 11.3 이상, AIR 3.3 이상에서 사용할 수 있습니다.

  • securityDomain : 이 속성은 이미지가 아닌 SWF 파일을 로드할 때만 사용합니다. Loader 객체를 포함하는 파일의 도메인과 다른 도메인에서의 SWF 파일에 대해 이 속성을 지정합니다. securityDomain 속성의 경우 현재 null (기본값) 및 SecurityDomain.currentDomain 의 두 값만 지원됩니다. SecurityDomain.currentDomain 을 지정하면 로드된 SWF 파일이 로드하는 SWF 파일의 샌드박스로 가져와져서 로드하는 SWF 파일의 자체 서버에서 로드된 것처럼 작동합니다. 이 기능은 로드된 SWF 파일 서버에 URL 정책 파일이 있고 로드하는 SWF 파일의 도메인에서 액세스할 수 있는 경우에만 허용됩니다. 필요한 정책 파일이 있는 경우에는 로드가 시작될 때 로더와 로드되는 파일에서 자유롭게 서로 스크립팅할 수 있는데, 이는 이 두 항목이 동일한 샌드박스에 있기 때문입니다. 대부분의 샌드박스 가져오기 작업은 일반적인 로드를 수행한 다음 로드된 SWF 파일에서 Security.allowDomain() 메서드를 호출하는 작업으로 바꿀 수 있습니다. 로드된 SWF 파일이 자체의 고유 샌드박스에 있게 되어 SWF 파일의 실제 서버에 있는 리소스에 액세스할 수 있기 때문에 두 번째 방법이 더욱 사용하기 쉽습니다.

  • applicationDomain : 이 속성은 ActionScript 3.0으로 작성된 SWF 파일을 로드할 때만 사용합니다. 이미지 파일이나 ActionScript 1.0 또는 2.0으로 작성된 SWF 파일은 해당하지 않습니다. 파일을 로드할 때 사용자는 해당 파일을 로드하는 SWF 파일 응용 프로그램 도메인의 자식인 새 응용 프로그램 도메인(기본 위치)이 아닌 특정 응용 프로그램 도메인에 배치되도록 지정할 수 있습니다. 이때, 응용 프로그램 도메인은 보안 도메인의 하위 개념이며, 따라서 이는 로드하는 SWF 파일을 자체 서버에서 가져왔거나, 또는 securityDomain 속성을 사용하여 자체 보안 도메인으로 성공적으로 가져온 경우 즉, 로드하는 SWF 파일이 자체 보안 도메인에 있는 경우에만 대상 응용 프로그램 도메인을 지정할 수 있습니다. 응용 프로그램 도메인을 지정했으나 로드된 SWF 파일이 다른 보안 도메인에 속한 경우에는 applicationDomain 에 지정된 도메인은 무시됩니다. 자세한 내용은 응용 프로그램 도메인 작업 을 참조하십시오.

자세한 내용은 로드 컨텍스트 지정 을 참조하십시오.

Loader 객체의 중요한 속성은 LoaderInfo 객체인 contentLoaderInfo 속성입니다. 다른 대부분의 객체와 달리 LoaderInfo 객체는 로드하는 SWF 파일과 로드된 내용 간에 공유되며 항상 양쪽에서 모두 액세스할 수 있습니다. 로드된 내용이 SWF 파일인 경우 DisplayObject.loaderInfo 속성을 통해 LoaderInfo 객체에 액세스할 수 있습니다. LoaderInfo 객체에는 로드 진행률, 로더 및 로드된 내용의 URL, 로더와 로드된 내용 간의 신뢰 관계 및 기타 정보가 포함됩니다. 자세한 내용은 로드 진행률 모니터링 을 참조하십시오.

사운드 및 비디오 로드

local-with-filesystem 샌드박스에 있는 내용을 제외한 모든 내용은 Sound.load() , NetConnection.connect() NetStream.play() 메서드를 사용하여 네트워크에서 사운드와 비디오를 로드할 수 있습니다.

local-with-filesystem 및 AIR 응용 프로그램 샌드박스의 내용만 로컬 파일 시스템에서 미디어를 로드할 수 있습니다. local-with-filesystem 샌드박스, AIR 응용 프로그램 샌드박스 또는 local-trusted 샌드박스에 있는 내용만 해당 로드된 파일의 데이터에 액세스할 수 있습니다.

로드된 미디어의 데이터에 액세스하는 데는 몇 가지 제한 사항이 있습니다. 자세한 내용은 데이터로 로드된 미디어 액세스 를 참조하십시오.

텍스트 필드에서 <img> 태그를 사용하여 SWF 파일 및 이미지 로드

다음 코드와 같이 <img> 태그를 사용하여 텍스트 필드로 SWF 파일과 비트맵을 로드할 수 있습니다.

<img src = 'filename.jpg' id = 'instanceName' >

다음 코드와 같이 TextField 인스턴스의 getImageReference() 메서드를 사용하여 위와 같은 방식으로 로드된 내용에 액세스할 수 있습니다.

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

하지만 이렇게 로드된 SWF 파일과 이미지는 원래 위치에 있는 샌드박스에 배치됩니다.

텍스트 필드에서 <img> 태그를 사용하여 이미지를 로드할 때, 이미지의 데이터에 대한 액세스는 URL 정책 파일에서 허용됩니다. 다음 코드와 같이 <img> 태그에 checkPolicyFile 속성을 추가하여 정책 파일을 확인할 수 있습니다.

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

텍스트 필드에서 <img> 태그를 사용하여 SWF를 로드할 때 Security.allowDomain() 메서드를 호출하여 SWF 파일의 데이터에 대한 액세스를 허용할 수 있습니다.

텍스트 필드의 <img> 태그를 사용하여 외부 파일을 로드하는 경우(SWF 파일에 포함된 Bitmap 클래스를 사용하는 경우와는 반대), Loader 객체가 자동으로 TextField 객체의 자식으로 생성되고 ActionScript의 Loader 객체를 사용하여 파일을 로드한 것과 마찬가지로 외부 파일이 해당 Loader에 로드됩니다. 이 경우 getImageReference() 메서드에서 자동으로 생성된 Loader를 반환합니다. 호출하는 코드와 동일한 보안 샌드박스에 있기 때문에 이 Loader 객체에 액세스할 때는 별도의 보안 확인이 필요하지 않습니다.

하지만 Loader 객체의 content 속성을 참조하여 로드된 미디어에 액세스하는 경우에는 보안 규칙이 적용됩니다. 내용이 이미지일 경우에는 URL 정책 파일을 구현해야 하고, 내용이 SWF 파일인 경우에는 SWF 파일에 allowDomain() 메서드를 호출하는 코드가 있어야 합니다.

Adobe AIR

응용 프로그램 샌드박스에서 텍스트 필드에 있는 <img> 태그는 피싱 공격을 방지하기 위해 무시됩니다. 또한 응용 프로그램 샌드박스에서 실행되는 코드는 Security allowDomain() 메서드를 호출하도록 허용되지 않습니다.

RTMP 서버를 사용하여 제공된 내용

Flash Media Server는 RTMP(Real-Time Media Protocol)를 사용하여 데이터, 오디오 및 비디오를 제공합니다. RTMP URL을 매개 변수로 전달하고 NetConnection 클래스의 connect() 메서드를 사용하여 이 미디어를 로드할 수 있습니다. Flash Media Server는 요청하는 파일의 도메인을 기준으로 연결을 제한하고 내용 다운로드를 금지할 수 있습니다. 자세한 내용은 www.adobe.com/go/learn_fms_docs_kr 에서 온라인으로 제공되는 Flash Media Server 설명서를 참조하십시오.

BitmapData.draw() , BitmapData.drawWithQuality() SoundMixer.computeSpectrum() 메서드를 사용하여 RTMP 스트림에서 런타임 그래픽과 사운드 데이터를 추출하려면 해당 서버에서 액세스를 허용해야 합니다. 서버측 ActionScript Client.videoSampleAccess Client.audioSampleAccess 속성을 사용하여 Flash Media Server에 있는 특정 디렉토리에 대한 액세스를 허용합니다. 자세한 내용은 서버측 ActionScript 언어 참조 설명서 를 참조하십시오. ( drawWithQuality 메서드는 Flash Player 11.3 이상, AIR 3.3 이상에서 사용할 수 있습니다.)