HTMLLoader 클래스

Adobe AIR 1.0 이상

Adobe AIR의 HTMLLoader 클래스는 AIR 응용 프로그램에 HTML 내용을 표시할 수 있는 표시 객체를 정의합니다. SWF 기반 응용 프로그램은 HTMLLoader 컨트롤을 기존 윈도우에 추가하거나 HTMLLoader.createRootWindow()를 사용하여 HTMLLoader 객체를 자동으로 포함하는 HTML 윈도우를 만들 수 있습니다. HTMLLoader 객체는 로드된 HTML 페이지 내에서 JavaScript window.htmlLoader 속성을 통해 액세스할 수 있습니다.

URL에서 HTML 내용 로드

다음 코드에서는 URL을 HTMLLoader 객체로 로드(응용 프로그램의 HTML 내용을 표시하기 위한 스테이지 또는 기타 표시 객체 컨테이너의 자식으로 HTMLLoader 추가)합니다.

import flash.html.HTMLLoader; 
 
var html:HTMLLoader = new HTMLLoader; 
html.width = 400; 
html.height = 600; 
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); 
html.load(urlReq);

HTMLLoader 객체의 widthheight 속성을 모두 기본적으로 0으로 설정합니다. HTMLLoader 객체를 스테이지에 추가할 때 이러한 크기를 설정할 수 있습니다. HTMLLoader는 페이지가 로드될 때 여러 이벤트를 전달합니다. 이러한 이벤트를 사용하여 로드된 페이지와 상호 작용해도 되는 경우를 결정할 수 있습니다. 이러한 이벤트에 대해서는 AIR에서 HTML 관련 이벤트 처리에서 자세하게 설명합니다.

참고: Flex 프레임워크에서 UIComponent 클래스를 확장하는 클래스만 Flex 컨테이너 구성 요소의 자식으로 추가할 수 있습니다. 따라서 HTMLLoader를 Flex 컨테이너 구성 요소의 자식으로 직접 추가할 수 없습니다. 그러나 Flex mx:HTML 컨트롤을 사용하거나, UIComponent를 확장하고 HTMLLoader를 UIComponent의 자식으로 포함하는 사용자 정의 클래스를 작성하거나, HTMLLoader를 UIComponent의 자식으로 추가하고 UIComponent를 Flex 컨테이너에 추가할 수 있습니다.

또한 TextField 클래스를 사용하여 HTML 텍스트를 렌더링할 수 있지만 그 기능은 제한적입니다. Adobe® Flash® Player의 TextField 클래스는 HTML 마크업의 하위 집합을 지원하지만 크기 제한 때문에 그 기능은 제한적입니다. Adobe AIR에 포함된 HTMLLoader 클래스는 Flash Player에서 사용할 수 없습니다.

문자열에서 HTML 내용 로드

HTMLLoader 객체의 loadString() 메서드는 HTML 내용의 문자열을 HTMLLoader 객체로 로드합니다.

var html:HTMLLoader = new HTMLLoader(); 
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>"; 
html.loadString(htmlStr);

기본적으로 loadString() 메서드를 통해 로드된 내용은 비 응용 프로그램 샌드박스에 배치되며 다음 특성을 갖게 됩니다.

  • 파일 시스템이 아니라 네트워크에서 내용을 로드할 수 있게 됩니다.

  • XMLHttpRequest를 사용하여 데이터를 로드할 수 없습니다.

  • window.location 속성이 "about:blank"로 설정됩니다.

  • 내용이 모든 비 응용 프로그램 샌드박스의 내용과 마찬가지로 window.runtime 속성에 액세스할 수 없습니다.

AIR 1.5에서는 HTMLLoader 클래스에 placeLoadStringContentInApplicationSandbox 속성이 포함됩니다. 이 속성을 HTMLLoader 객체에 대해 true로 설정하면 loadString() 메서드를 통해 로드된 내용이 응용 프로그램 샌드박스에 배치됩니다(기본값: false). 이렇게 하면 loadString() 메서드를 통해 로드된 내용이 window.runtime 속성 및 모든 AIR API에 액세스할 수 있게 됩니다. 이 속성을 true로 설정하는 경우 loadString() 메서드 호출에 사용된 문자열의 데이터 소스를 신뢰할 수 있는지 확인해야 합니다. 이 속성을 true로 설정하면 HTML 문자열의 코드 문이 전체 응용 프로그램 권한으로 실행됩니다. 문자열에 유해한 코드가 포함되어 있지 않은 경우에만 이 속성을 true로 설정하십시오.

AIR 1.0 또는 AIR 1.1 SDK로 컴파일된 응용 프로그램에서는 loadString() 메서드를 통해 로드된 내용이 응용 프로그램 샌드박스에 배치됩니다.

AIR 응용 프로그램에서 HTML 사용 시 중요한 보안 규칙

AIR 응용 프로그램과 함께 설치한 파일은 AIR API에 액세스할 수 있습니다. 보안상의 이유로 다른 소스의 내용은 이에 해당하지 않습니다. 예를 들어 이러한 제한 사항으로 인해 원격 도메인(예: http://example.com)의 내용이 사용자의 데스크톱 디렉토리를 읽을 수 없거나 더 많은 제약을 받게 됩니다.

eval() 함수 및 관련 API 호출을 통해 노출될 수 있는 보안 취약성이 존재하기 때문에 응용 프로그램과 함께 설치되는 내용은 기본적으로 이러한 메서드를 사용할 수 없습니다. 그러나 일부 Ajax 프레임워크는 eval() 함수 및 관련 API를 호출하는 기능을 사용합니다.

내용이 AIR 응용 프로그램에서 작동하도록 올바르게 구조화하려면 서로 다른 소스의 내용에 대한 보안 제한 사항의 규칙을 고려해야 합니다. 서로 다른 소스의 내용은 샌드박스(보안 샌드박스 참조)라고 하는 개별 보안 분류에 배치됩니다. 기본적으로 응용 프로그램과 함께 설치되는 내용은 응용 프로그램 샌드박스라고 하는 샌드박스에 설치되며 AIR API에 대한 액세스 권한이 부여됩니다. 응용 프로그램 샌드박스는 일반적으로 가장 안전한 샌드박스로, 신뢰할 수 없는 코드 실행을 금지하도록 제한합니다.

런타임을 통해 응용 프로그램과 함께 설치된 내용을 응용 프로그램 샌드박스가 아닌 다른 샌드박스에 로드할 수 있습니다. 비 응용 프로그램 샌드박스의 내용은 일반적인 웹 브라우저의 경우와 유사한 보안 환경에서 작동합니다. 예를 들어 비 응용 프로그램 샌드박스의 코드는 eval() 및 관련 메서드를 사용할 수 있지만 동시에 AIR API에 액세스할 수는 없습니다. 런타임에는 AIR API를 비 응용 프로그램 내용에 표시하지 않고 서로 다른 샌드박스의 내용이 안전하게 통신할 수 있도록 하는 몇 가지 방법이 있습니다. 자세한 내용은 서로 다른 보안 샌드박스의 내용 크로스 스크립팅을 참조하십시오.

보안상의 이유로 샌드박스에서의 사용이 제한되는 코드를 호출하면 런타임에서 JavaScript 오류: "응용 프로그램 보안 샌드박스에서의 JavaScript 코드에 대한 Adobe AIR 런타임 보안 위반"을 전달합니다.

이 오류를 방지하려면 다음 단원 보안 관련 JavaScript 오류 방지에서 설명하는 코딩 방법을 따르십시오.

자세한 내용은 Adobe AIR의 HTML 보안을 참조하십시오.