예제: 시스템 기능 검색

CapabilitiesExplorer 예제는 flash.system.Capabilities 클래스를 사용하여 사용자의 Flash Player에서 지원하는 기능을 확인할 수 있는 방법을 보여 줍니다. 이 예제는 다음과 같은 기술에 대해 설명합니다.

이 샘플에 대한 응용 프로그램 파일을 구하려면 www.adobe.com/go/learn_programmingAS3samples_flash_kr을 방문하십시오. CapabilitiesExplorer 응용 프로그램 파일은 Samples/CapabilitiesExplorer 폴더에 있습니다. 이 응용 프로그램은 다음 파일로 구성되어 있습니다.

파일

설명

CapabilitiesExplorer.fla

또는

CapabilitiesExplorer.mxml

Flash(FLA) 또는 Flex(MXML) 형식의 기본 응용 프로그램 파일입니다.

com/example/programmingas3/capabilities/CapabilitiesGrabber.as

시스템 Capabilities를 배열에 추가하고, 항목을 정렬하며, ExternalInterface 클래스를 사용하여 브라우저 기능을 검색하는 등 응용 프로그램의 기본 기능을 제공하는 클래스입니다.

capabilities.html

External API와 통신할 수 있도록 필수 JavaScript를 포함하는 HTML 컨테이너입니다.

세부 목차

CapabilitiesExplorer 개요
CapabilitiesGrabber 클래스 개요
JavaScript로 통신

CapabilitiesExplorer 개요

CapabilitiesExplorer.mxml 파일은 CapabilitiesExplorer 응용 프로그램의 사용자 인터페이스를 설정하는 작업을 담당합니다. 사용자의 Flash Player 기능은 Stage의 DataGrid 구성 요소 인스턴스 내에 표시됩니다. HTML 컨테이너에서 응용 프로그램을 실행하는 경우와 External API를 사용할 수 있는 경우에는 브라우저 기능도 표시됩니다.

기본 응용 프로그램 파일의 creationComplete 이벤트가 전달되면 initApp() 메서드가 호출됩니다. initApp() 메서드는 com.example.programmingas3.capabilities.CapabilitiesGrabber 클래스에서 getCapabilities() 메서드를 호출합니다. initApp() 메서드에 대한 코드는 다음과 같습니다.

private function initApp():void
{
    var dp:Array = CapabilitiesGrabber.getCapabilities();
    capabilitiesGrid.dataProvider = dp;
}

CapabilitiesGrabber.getCapabilities() 메서드는 Flash Player 및 브라우저 기능의 정렬된 배열을 반환합니다. 그런 다음 이 배열이 스테이지에 있는 capabilitiesGrid DataGrid 구성 요소 인스턴스의 dataProvider 속성으로 설정됩니다.

CapabilitiesGrabber 클래스 개요

CapabilitiesGrabber 클래스의 정적 getCapabilities() 메서드는 flash.system.Capabilities 클래스에서 배열(capDP)에 각 속성을 추가합니다. 그런 다음 CapabilitiesGrabber 클래스에서 정적 getBrowserObjects() 메서드를 호출합니다. getBrowserObjects() 메서드는 External API를 사용하여 브라우저의 기능이 포함된 브라우저의 navigator 객체를 반복합니다. getCapabilities() 메서드는 다음과 같습니다.

public static function getCapabilities():Array
{
    var capDP:Array = new Array();
    capDP.push({name:"Capabilities.avHardwareDisable", value:Capabilities.avHardwareDisable}); 
    capDP.push({name:"Capabilities.hasAccessibility", value:Capabilities.hasAccessibility}); 
    capDP.push({name:"Capabilities.hasAudio", value:Capabilities.hasAudio});
    ...
    capDP.push({name:"Capabilities.version", value:Capabilities.version});
    var navArr:Array = CapabilitiesGrabber.getBrowserObjects();
    if (navArr.length > 0)
    {
        capDP = capDP.concat(navArr);
    }
    capDP.sortOn("name", Array.CASEINSENSITIVE);
    return capDP;
}

getBrowserObjects() 메서드는 브라우저의 navigator 객체에서 각 속성의 배열을 반환합니다. 이 배열에 항목 하나 이상의 길이가 포함된 경우 브라우저 기능의 배열(navArr)이 Flash Player 기능(capDP)에 추가되고 전체 배열이 알파벳 순서로 정렬됩니다. 마지막으로 정렬된 배열이 기본 응용 프로그램 파일에 반환된 다음 데이터 격자를 채웁니다. getBrowserObjects() 메서드에 대한 코드는 다음과 같습니다.

private static function getBrowserObjects():Array
{
    var itemArr:Array = new Array();
    var itemVars:URLVariables;
    if (ExternalInterface.available)
    {
        try
        {
            var tempStr:String = ExternalInterface.call("JS_getBrowserObjects");
            itemVars = new URLVariables(tempStr);
            for (var i:String in itemVars)
            {
                itemArr.push({name:i, value:itemVars[i]});
            }
        }
        catch (error:SecurityError)
        {
            // ignore
        }
    }
    return itemArr;
}

현재 사용자 환경에서 External API를 사용할 수 있는 경우 Flash Player에서 JavaScript JS_getBrowserObjects() 메서드를 호출하여 브라우저의 navigator 객체를 반복하고 URL 인코딩된 값의 문자열을 ActionScript로 반환합니다. 그러면 이 문자열이 URLVariables 객체(itemVars)로 변환되고 호출 스크립트로 반환되는 itemArr 배열에 추가됩니다.

JavaScript로 통신

CapabilitiesExplorer 응용 프로그램을 구축하는 마지막 단계는 필요한 JavaScript를 작성하여 브라우저의 navigator 객체에서 각 항목을 반복하고 이름-값 쌍을 임시 배열에 추가하는 것입니다. container.html 파일의 JavaScript JS_getBrowserObjects() 메서드에 대한 코드는 다음과 같습니다.

<script language="JavaScript">
    function JS_getBrowserObjects()
    {
        // 브라우저의 각 항목을 포함할 배열을 만듭니다.
        var tempArr = new Array();

        // 브라우저의 각 navigator 객체 항목에 대해 반복합니다.
        for (var name in navigator)
        {
            var value = navigator[name];

            // 현재 값이 string 또는 Boolean 객체이면 배열에 추가하고, 
            // 그렇지 않으면 항목을 무시합니다.
            switch (typeof(value))
            {
                case "string":
                case "boolean":

                    // 배열에 추가될 임시 문자열을 만듭니다.
                    // JavaScript의 escape() 함수를 사용하여 값을 URL 인코딩해야 합니다.
                    var tempStr = "navigator." + name + "=" + escape(value);
                    // URL 인코딩한 이름/값 쌍을 배열로 이동합니다.
                    tempArr.push(tempStr);
                    break;
            }
        }
        // 브라우저의 각 screen 객체 항목에 대해 반복합니다.
        for (var name in screen)
        {
            var value = screen[name];

            // 현재 값이 숫자이면 배열에 추가하고, 그렇지 않으면 항목을 무시합니다.
            switch (typeof(value))
            {
                case "number":
                    var tempStr = "screen." + name + "=" + escape(value);
                    tempArr.push(tempStr);
                    break;
            }
        }
        // 배열을 URL 인코딩된 이름-값 쌍의 문자열로 반환합니다.
        return tempArr.join("&");
    }
</script>

이 코드는 navigator 객체에서 모든 이름-값 쌍을 포함하는 있는 임시 배열을 만드는 것으로 시작합니다. 그 다음은 for..in 루프를 사용하여 navigator 객체를 반복하고 현재 값의 데이터 유형을 평가하여 원치 않는 값을 제외합니다. 이 응용 프로그램에서는 String 또는 부울 값만 사용하고 다른 데이터 유형(함수 또는 배열)은 무시합니다. navigator 객체의 각 String 또는 부울 값은 tempArr 배열에 추가됩니다. 그 다음에는 for..in 루프를 사용하여 브라우저의 screen 객체가 반복되고 각 숫자 값이 tempArr 배열에 추가됩니다. 마지막으로 임시 배열은 Array.join() 메서드를 사용하여 문자열로 변환됩니다. 배열은 앰퍼샌드(&)를 구분 기호로 사용합니다. 그러므로 ActionScript에서 URLVariables 클래스를 사용하여 쉽게 데이터의 구문을 분석할 수 있습니다.


Flash CS3

 

이 페이지에 의견 추가되면 전자 메일 알림 받기 | 의견 보고서

현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/main/00000329.html