flash.net 패키지에는 새 브라우저 창을 열고, URL 요청을 서버에 보내고, 클래스 앨리어싱을 처리하는 패키지 레벨 함수가 들어 있습니다.
함수 | 정의 주체 | ||
---|---|---|---|
registerClassAlias() 메서드에 대한 호출을 통해 앨리어스를 등록한 적이 있는 클래스를 찾습니다. | flash.net | ||
Flash Player 컨테이너가 포함된 응용 프로그램(대개 브라우저)의 윈도우를 열거나 교체합니다. | flash.net | ||
객체가 AMF(Action Message Format)로 인코딩될 때 객체의 클래스(유형)를 유지합니다. | flash.net | ||
서버로 URL 요청을 보내지만 응답은 무시합니다. | flash.net |
getClassByAlias | () | 함수 |
public function getClassByAlias(aliasName:String):Class
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
registerClassAlias()
메서드에 대한 호출을 통해 앨리어스를 등록한 적이 있는 클래스를 찾습니다.
이 메서드는 flash.utils.getDefinitionByName()
메서드와 상호 작용하지 않습니다.
매개 변수
aliasName:String — 찾은 앨리어스입니다.
|
Class — 지정된 앨리어스와 연관된 클래스입니다. 찾지 못하면 예외가 발생합니다.
|
오류
ReferenceError — 앨리어스가 등록되어 있지 않습니다.
|
관련 API 요소
navigateToURL | () | 함수 |
public function navigateToURL(request:URLRequest, window:String = null):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Flash Player 컨테이너가 포함된 응용 프로그램(대개 브라우저)의 윈도우를 열거나 교체합니다. Adobe AIR에서 함수는 기본 시스템 웹 브라우저에서 URL을 엽니다.
중요 보안 참고 사항
개발자들은 종종 FlashVars와 같은 외부 소스에서 얻은 URL 값을 navigateToURL()
함수로 전달합니다. 공격자들은 이러한 외부 소스를 조작하여 크로스 사이트 스크립팅과 같은 공격을 시도하려고 합니다. 따라서 개발자들은 이 함수로 전달하기 전에 모든 URL의 유효성을 확인해야 합니다.
URL 데이터의 유효성을 검사하는 방법은 전체 응용 프로그램에서 사용된 URL에 따라 달라질 수 있습니다. 가장 일반적인 데이터 유효성 검사 방법은 URL이 응용 프로그램 스킴에 속하는지 확인하는 것입니다. 예를 들어 실수로 javascript: URL을 허용하게 되면 크로스 사이트 스크립팅이 발생하게 됩니다. 도메인에 있는 URL만 사용하면 피싱 공격자들이 SWF 파일을 개방형 리디렉터로 사용할 수 없게 됩니다. 보안 기능을 강화하려면 URL 경로를 확인하고 URL이 RFC 지침을 따르도록 해야 합니다.
예를 들어 다음 코드는 http:// 또는 https://로 시작하지 않는 URL을 거부하고 URL이 해당 도메인 이름 내에 있는지 확인함으로써 데이터 유효성을 검사하는 간단한 예를 보여 줍니다. 일부 웹 응용 프로그램에서는 이 예가 적용되지 않을 수 있으므로 URL에 대한 추가 검사가 필요할 수 있습니다.
// AS3 Regular expression pattern match for URLs that start with http:// and https:// plus your domain name. function checkProtocol (flashVarURL:String):Boolean { // Get the domain name for the SWF if it is not known at compile time. // If the domain is known at compile time, then the following two lines can be replaced with a hard coded string. var my_lc:LocalConnection = new LocalConnection(); var domainName:String = my_lc.domain; // Build the RegEx to test the URL. // This RegEx assumes that there is at least one "/" after the // domain. http://www.mysite.com will not match. var pattern:RegExp = new RegExp("^http[s]?\:\\/\\/([^\\/]+)\\/"); var result:Object = pattern.exec(flashVarURL); if (result == null || result[1] != domainName || flashVarURL.length >= 4096) { return (false); } return (true); }
브라우저에서 실행 중인 로컬 내용의 경우 첫 번째 매개 변수로 전달된 URLRequest
객체를 통해 "javascript:"
의사 프로토콜을 지정하는 navigateToURL()
메서드 호출은 SWF 파일 및 포함하는 웹 페이지(있는 경우)가 local-trusted 보안 샌드박스에 있는 경우에만 허용됩니다. 일부 브라우저에서는 navigateToURL()
메서드에 JavaScript 프로토콜을 사용할 수 없습니다. 대신 ExternalInterface
API의 call()
메서드를 사용하여 포함하는 HTML 페이지 내에서 JavaScript 메서드를 호출할 수 있습니다.
Adobe AIR의 비응용 프로그램 샌드박스 및 Flash Player에서는 일반적으로 예약된 포트에 연결할 수 없습니다. 차단된 포트의 전체 목록은 ActionScript 3.0 개발자 안내서의 "제한적 네트워킹 API"를 참조하십시오.
브라우저에서 실행되는 Flash Player 10 이상에서는 프로그래밍 방식으로 이 메서드를 사용하여 팝업 윈도우를 열지 못할 수도 있습니다. 브라우저 및 브라우저 구성에 따라 팝업 윈도우가 차단될 수 있으므로 팝업 윈도우가 나타나는 것을 보장할 수 없습니다. 하지만 마우스 클릭이나 키 누르기 이벤트에 대한 이벤트 핸들러 등 사용자 액션의 직접적인 결과로 실행되는 코드에서 이 메서드를 사용하여 팝업 윈도우를 열도록 하면 팝업 윈도우가 나타날 가능성이 높아집니다.
Flash Player 10 이상에서는 multipart Content-Type(예: "multipart/form-data")을 사용하고 POST 본문 내 "content-disposition" 헤더에 "filename" 매개 변수를 지정하여 업로드를 처리하는 경우 POST 작업이 업로드에 적용되는 보안 규칙의 영향을 받을 수 있습니다.
- POST 작업은 마우스 클릭이나 키 누르기 같은 사용자 동작에 대한 응답으로 수행됩니다.
- POST 작업이 크로스 도메인인 경우, 즉 POST 대상이 POST 요청을 보내는 SWF 파일과 같은 서버에 없는 경우 대상 서버는 크로스 도메인 액세스를 허용하는 URL 정책 파일을 제공해야 합니다.
또한 multipart Content-Type의 경우 구문이 RFC2046 표준에 따라 유효해야 합니다. 구문이 유효하지 않은 경우 POST 작업은 업로드에 적용되는 보안 규칙의 영향을 받을 수 있습니다.
AIR에서는 sms: 및 tel: URI 스킴이 모바일 플랫폼에서 지원됩니다. Android에서는 vipaccess:, connectpro: 및 market: URI 스킴이 지원됩니다. URL 구문은 플랫폼 명명 규칙을 따릅니다. 예를 들어 Android에서는 URI 스킴이 소문자여야 합니다. 이러한 스킴 중 하나를 사용하여 URL을 탐색하는 경우 런타임에 기본 응용 프로그램에서 URL이 열려 스킴이 처리됩니다. 따라서 tel:+5555555555
로 이동하면 지정된 번호가 이미 입력된 전화 다이얼러가 열립니다. URL을 처리하기 위해서는 전화 다이얼러와 같은 별도의 응용 프로그램이나 유틸리티가 있어야 합니다.
다음 코드는 Android에서 VIP Access 및 Connect Pro 응용 프로그램을 호출하는 방법을 보여 줍니다.
//Invoke the VIP Access Application. navigateToURL(new URLRequest("vipaccess://com.verisign.mvip.main?action=securitycode")); //Invoke the Connect Pro Application. navigateToURL(new URLRequest("connectpro://"));
매개 변수
request:URLRequest — 이동할 URL을 지정하는 URLRequest 객체입니다.
현재 Adobe AIR에서 실행 중인 내용의 경우 | |
window:String (default = null ) — request 매개 변수에 의해 지정된 문서를 표시할 브라우저 창 또는 HTML 프레임입니다. 특정 윈도우의 이름을 입력하거나 다음 값 중 하나를 사용할 수 있습니다.
이 매개 변수 값을 지정하지 않으면 빈 윈도우가 새로 만들어집니다. 독립형 플레이어의 경우 새 윈도우( 참고: local-with-filesystem 샌드박스에서 실행 중인 SWF 파일의 코드가 |
오류
IOError — request 객체의 digest 속성이 null 이 아닙니다. SWZ 파일(Adobe 플랫폼 구성 요소)을 로드할 때는 URLRequest 객체가 URLLoader.load() 메서드 호출에 사용되는 경우에만 URLRequest 객체의 digest 속성을 설정해야 합니다.
| |
SecurityError — Flash Player(및 Adobe AIR의 비응용 프로그램 샌드박스 내용)에서 이 오류는 다음과 같은 상황에서 발생합니다.
| |
Error — 메서드가 마우스 클릭이나 키 누르기 이벤트와 같은 사용자 액션에 대한 응답으로 호출되지 않는 경우. 이 요구 사항은 Flash Player 내용 및 Adobe AIR의 비응용 프로그램 샌드박스 내용에만 적용됩니다.
|
기타 예제
관련 API 요소
예제 ( 예제 사용 방법 )
package { import flash.display.Sprite; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.net.URLVariables; public class NavigateToURLExample extends Sprite { public function NavigateToURLExample() { var url:String = "http://www.adobe.com"; var variables:URLVariables = new URLVariables(); variables.exampleSessionId = new Date().getTime(); variables.exampleUserLabel = "Your Name"; var request:URLRequest = new URLRequest(url); request.data = variables; try { navigateToURL(request); } catch (e:Error) { // handle error here } } } }
// Requires // - Button symbol on Stage (or a display object, such as a MovieClip) with instance name "buttonSymbol" // buttonSymbol.addEventListener(MouseEvent.CLICK, buttonSymbol_click); function buttonSymbol_click(evt:MouseEvent):void { var req:URLRequest = new URLRequest("http://www.adobe.com/"); navigateToURL(req, "_blank"); }
var request:URLRequest = new URLRequest( "tel:+5555555555" ); navigateToURL( request );
var request:URLRequest = new URLRequest( "sms:+5555555555" ); navigateToURL( request );
var request:URLRequest = new URLRequest( "market://search?q=pname:com.adobe.flashplayer" ); navigateToURL( request );
registerClassAlias | () | 함수 |
public function registerClassAlias(aliasName:String, classObject:Class):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
객체가 AMF(Action Message Format)로 인코딩될 때 객체의 클래스(유형)를 유지합니다. 객체를 AMF로 인코딩할 경우 이 함수는 해당 클래스의 앨리어스를 저장하여 객체 디코딩 시 클래스를 복구할 수 있도록 합니다. 객체 클래스에 대한 앨리어스가 인코딩 컨텍스트에 등록되지 않은 경우, 해당 객체는 익명 객체로 인코딩됩니다. 마찬가지로 동일한 앨리어스가 디코딩 컨텍스트에 등록되지 않은 경우, 디코딩 데이터에 대해 익명 객체가 만들어집니다.
객체를 AMF로 인코딩하는 클래스에는 LocalConnection, ByteArray, SharedObject, NetConnection 및 NetStream이 있습니다.
인코딩 및 디코딩 컨텍스트는 앨리어스에 대해 동일한 클래스를 사용할 필요가 없습니다. 대상 클래스에 소스 클래스가 직렬화하는 모든 멤버가 포함되어 있으면 이러한 컨텍스트는 클래스를 의도적으로 변경할 수 있습니다.
매개 변수
aliasName:String — 사용할 앨리어스입니다.
| |
classObject:Class — 지정된 앨리어스와 연관된 클래스입니다.
|
오류
TypeError — 두 매개 변수 중 하나가 null 입니다.
|
관련 API 요소
예제 ( 예제 사용 방법 )
registerClassAlias()
함수를 사용하여 ExampleClass 클래스에 대한 앨리어스(com.example.eg
)를 등록합니다. 앨리어스가 클래스에 대해 등록되어 있기 때문에 객체는 ExampleClass의 인스턴스로 직렬화 해제될 수 있으며, 코드는 true
를 출력합니다. registerClassAlias()
호출이 제거되면 코드는 false
를 출력합니다.
package { import flash.display.Sprite; import flash.net.registerClassAlias; import flash.utils.ByteArray; public class RegisterClassAliasExample extends Sprite { public function RegisterClassAliasExample() { registerClassAlias("com.example.eg", ExampleClass); var eg1:ExampleClass = new ExampleClass(); var ba:ByteArray = new ByteArray(); ba.writeObject(eg1); ba.position = 0; var eg2:* = ba.readObject(); trace(eg2 is ExampleClass); // true } } } class ExampleClass {}
sendToURL | () | 함수 |
public function sendToURL(request:URLRequest):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | AIR 1.0, Flash Player 9, Flash Lite 4 |
서버로 URL 요청을 보내지만 응답은 무시합니다.
서버 응답을 검사하려면 대신 URLLoader.load()
메서드를 사용합니다.
일반적으로 예약된 포트에 연결할 수 없습니다. 차단된 포트의 전체 목록은 ActionScript 3.0 개발자 안내서의 "제한적 네트워킹 API"를 참조하십시오.
SWF 내용이 들어 있는 HTML 페이지에서 allowNetworking
매개 변수(object
및 embed
태그)를 설정하여 SWF 파일에서 이 메서드를 사용하지 않게 할 수 있습니다.
Flash Player 10 이상에서는 multipart Content-Type(예: "multipart/form-data")을 사용하고 POST 본문 내 "content-disposition" 헤더에 "filename" 매개 변수를 지정하여 업로드를 처리하는 경우 POST 작업이 업로드에 적용되는 보안 규칙의 영향을 받을 수 있습니다.
- POST 작업은 마우스 클릭이나 키 누르기 같은 사용자 동작에 대한 응답으로 수행됩니다.
- POST 작업이 크로스 도메인인 경우, 즉 POST 대상이 POST 요청을 보내는 SWF 파일과 같은 서버에 없는 경우 대상 서버는 크로스 도메인 액세스를 허용하는 URL 정책 파일을 제공해야 합니다.
또한 multipart Content-Type의 경우 구문이 RFC2046 표준에 따라 유효해야 합니다. 구문이 유효하지 않은 경우 POST 작업은 업로드에 적용되는 보안 규칙의 영향을 받을 수 있습니다.
보안에 대한 자세한 내용은 Flash Player 개발자 센터 항목: 보안을 참조하십시오.
매개 변수
request:URLRequest — 데이터를 보낼 URL을 지정하는 URLRequest 객체입니다.
|
오류
SecurityError — 신뢰할 수 없는 로컬 SWF 파일은 인터넷 통신이 불가능합니다. 이 SWF 파일을 네트워킹 가능한 로컬 파일(local-with-networking) 또는 신뢰할 수 있는 파일로 다시 규정하면 이 문제를 해결할 수 있습니다.
| |
SecurityError — 일반적으로 예약된 포트에 연결할 수 없습니다. 차단된 포트의 전체 목록은 ActionScript 3.0 개발자 안내서의 "제한적 네트워킹 API"를 참조하십시오.
|
예제 ( 예제 사용 방법 )
package { import flash.display.Sprite; import flash.net.URLRequest; import flash.net.URLVariables; import flash.net.sendToURL; public class SendToURLExample extends Sprite { public function SendToURLExample() { var url:String = "http://www.yourDomain.com/application.jsp"; var variables:URLVariables = new URLVariables(); variables.sessionId = new Date().getTime(); variables.userLabel = "Your Name"; var request:URLRequest = new URLRequest(url); request.data = variables; trace("sendToURL: " + request.url + "?" + request.data); try { sendToURL(request); } catch (e:Error) { // handle error here } } } }
Tue Jun 12 2018, 03:33 PM Z