AIR에서는 응용 프로그램이 데이터를 요청할 때 사용할 수 있는 XMLHttpRequest(XHR) 객체를 제공합니다. 다음 예에서는 간단한 데이터 요청을 보여 줍니다.
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "http:/www.example.com/file.data", true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
//do something with data...
}
}
xmlhttp.send(null);
브라우저와 달리 AIR에서는 응용 프로그램 샌드박스에서 실행 중인 내용이 모든 도메인의 데이터를 요청할 수 있습니다. JSON 문자열이 포함된 XHR의 결과는 결과에 실행 가능한 코드도 포함된 경우 외에는 데이터 객체로 평가될 수 있습니다. XHR 결과에 실행 가능한 명령문이 있는 경우 오류가 발생하고 평가 시도가 실패합니다.
원격 소스에서 코드가 실수로 삽입되지 않도록 하기 위해 동기식 XHR은 페이지 로드가 완료되기 전에 만들어진 경우 빈 결과를 반환합니다. 비동기 XHR은 항상 페이지가 로드된 후 반환됩니다.
기본적으로 AIR은 비 응용 프로그램 샌드박스에서 크로스 도메인 XMLHttpRequests를 차단합니다. 응용 프로그램 샌드박스의 부모 윈도우에서는 다음과 같이 포함하는 프레임 또는 iframe 요소에서 AIR에 추가된 특성인
allowCrossDomainXHR
을
true
로 설정하여 비 응용 프로그램 샌드박스의 내용을 포함하는 자식 프레임에서 크로스 도메인 요청을 허용할 수 있습니다.
<iframe id="mashup"
src="http://www.example.com/map.html"
allowCrossDomainXHR="true"
</iframe>
참고:
편리하다면 AIR URLStream 클래스를 사용하여 데이터를 다운로드할 수도 있습니다.
원격 샌드박스에 매핑된 응용 프로그램 내용을 포함하는 프레임 또는 iframe 요소에서 원격 서버에 XMLHttpRequest를 전달하는 경우 매핑 URL이 XHR에서 사용된 서버 주소에 마스크를 적용하지 않는지 확인합니다. 예를 들어 응용 프로그램 내용을 example.com 도메인의 원격 샌드박스에 매핑하는 다음과 같은 iframe 정의를 생각해 볼 수 있습니다.
<iframe id="mashup"
src="http://www.example.com/map.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/"
allowCrossDomainXHR="true"
</iframe>
sandboxRoot
특성은 www.example.com 주소의 루트 URL을 다시 매핑하므로 모든 요청이 원격 서버가 아닌 응용 프로그램 디렉토리에서 로드됩니다. 요청이 페이지 탐색에서 파생되는지 또는 XMLHttpRequest에서 파생되는지 여부에 상관없이 요청이 다시 매핑됩니다.
원격 서버에 대한 데이터 요청을 실수로 차단하지 않게 하려면
sandboxRoot
를 루트가 아닌 원격 URL의 하위 디렉토리에 매핑합니다. 이 디렉토리는 존재하지 않아도 됩니다. 예를 들어 www.example.com에 대한 요청이 응용 프로그램 디렉토리가 아닌 원격 서버에서 로드되도록 하려면 앞서 설명한 iframe을 다음과 같이 변경합니다.
<iframe id="mashup"
src="http://www.example.com/map.html"
documentRoot="app:/sandbox/"
sandboxRoot="http://www.example.com/air/"
allowCrossDomainXHR="true"
</iframe>
이 경우
air
하위 디렉토리의 내용만 로컬로 로드됩니다.
샌드박스 매핑에 대한 자세한 내용은
HTML 프레임 및 iframe 요소
및
Adobe AIR의 HTML 보안
을 참조하십시오.