Yetenekler örneği: Sistem yeteneklerini algılama

Flash Player 9 ve üstü

CapabilitiesExplorer örneği, kullanıcının Flash çalışma zamanı sürümünün hangi özellikleri desteklediğini belirlemek için, flash.system.Capabilities sınıfını nasıl kullanabileceğinizi gösterir. Bu örnekte şu teknikler öğretilmektedir:

  • Capabilities sınıfını kullanarak, kullanıcının Flash çalışma zamanı sürümünün hangi yetenekleri desteklediğini belirleme

  • Kullanıcının tarayıcısının hangi tarayıcı ayarlarını desteklediğini belirlemek için ExternalInterface sınıfını kullanma

Bu örneğin uygulama dosyalarını edinmek için bkz. www.adobe.com/go/learn_programmingAS3samples_flash_tr . CapabilitiesExplorer uygulama dosyalarını Samples/CapabilitiesExplorer klasöründe bulabilirsiniz. Uygulama aşağıdaki dosyaları içerir:

File

Açıklama

CapabilitiesExplorer.fla

veya

CapabilitiesExplorer.mxml

Flash (FLA) veya Flex (MXML) içindeki ana uygulama dosyası.

com/example/programmingas3/capabilities/CapabilitiesGrabber.as

Sistemin Capabilities öğelerini diziye ekleme, öğeleri sıralama ve tarayıcı yeteneklerini almak için ExternalInterface sınıfını kullanma gibi ana uygulama işlevlerini sağlayan sınıf.

capabilities.html

Harici API ile iletişim kurmak için gerekli JavaScript'i içeren bir HTML konteyneri.

CapabilitiesExplorer'a genel bakış

CapabilitiesExplorer.mxml dosyası, CapabilitiesExplorer uygulaması için kullanıcı arabiriminin kurulmasından sorumludur. Kullanıcının Flash çalışma zamanı sürümünün yetenekleri, Sahne Alanı'nda DataGrid bileşen örneğinde görüntülenir. Ayrıca bu uygulamalar bir HTML konteynerinden çalıştırılıyorsa ve harici API kullanılabiliyorsa, bu uygulamaların tarayıcı yetenekleri de görüntülenir.

Ana uygulama dosyasının creationComplete olayı gönderildiğinde, initApp() yöntemi çağrılır. initApp() yöntemi, com.example.programmingas3.capabilities.CapabilitiesGrabber sınıfından getCapabilities() yöntemini çağırır. initApp() yönteminin kodu şöyledir:

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

CapabilitiesGrabber.getCapabilities() yöntemi, Flash çalışma zamanı uygulamasının sıralanmış bir dizisini ve tarayıcı yeteneklerini döndürür, daha sonra bu dizi, Sahne Alanı'nda capabilitiesGrid DataGrid bileşen örneğinin dataProvider özelliğine ayarlanır.

CapabilitiesGrabber sınıfına genel bakış

CapabilitiesGrabber sınıfının statik getCapabilities() yöntemi, flash.system.Capabilities sınıfındaki özelliklerin her birini bir diziye ( capDP ) ekler. Daha sonra CapabilitiesGrabber sınıfında statik getBrowserObjects() yöntemini çağırır. getBrowserObjects() yöntemi, tarayıcının yeteneklerini içeren gezgin nesnesinde döngü gerçekleştirmek için harici API'yi kullanır. getCapabilities() yöntemi şöyledir:

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() yöntemi, tarayıcının gezgin nesnesinde bulunan özelliklerin her biri için bir dizi döndürür. Bu dizi, bir veya daha fazla öğe uzunluğundaysa, tarayıcı yetenekleri dizisi ( navArr ), Flash Player yetenekleri dizisinin ( capDP ) sonuna eklenir ve dizinin tamamı alfabetik olarak sıralanır. Son olarak, sıralanan dizi ana uygulama dosyasına döndürülür ve veri ızgarasını doldurur. getBrowserObjects() yönteminin kodu şöyledir:

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; 
}

Geçerli kullanıcı ortamında harici API varsa, Flash çalışma zamanı uygulaması, tarayıcının gezgin nesnesinde döngü gerçekleştirip ActionScript'e URL olarak kodlanmış değerlerin bir dizesini döndüren JavaScript JS_getBrowserObjects() yöntemini çağırır. Bu dize daha sonra bir URLVariables nesnesine ( itemVars ) dönüştürülür ve çağıran komut dosyasına döndürülen itemArr dizisine eklenir.

JavaScript ile iletişim kurma

CapabilitiesExplorer uygulamasının oluşturulmasında son kısım, tarayıcının gezgin nesnesindeki her öğe üzerinde döngü gerçekleştirip geçici diziye bir ad-değer çifti eklemek için geçerli JavaScript kodunun yazılmasıdır. container.html dosyasında JavaScript JS_getBrowserObjects() yönteminin kodu şöyledir:

<script language="JavaScript"> 
    function JS_getBrowserObjects() 
    { 
        // Create an array to hold each of the browser's items. 
        var tempArr = new Array(); 
 
        // Loop over each item in the browser's navigator object. 
        for (var name in navigator) 
        { 
            var value = navigator[name]; 
 
            // If the current value is a string or Boolean object, add it to the 
            // array, otherwise ignore the item. 
            switch (typeof(value)) 
            { 
                case "string": 
                case "boolean": 
 
                    // Create a temporary string which will be added to the array. 
                    // Make sure that we URL-encode the values using JavaScript's 
                    // escape() function. 
                    var tempStr = "navigator." + name + "=" + escape(value); 
                    // Push the URL-encoded name/value pair onto the array. 
                    tempArr.push(tempStr); 
                    break; 
            } 
        } 
        // Loop over each item in the browser's screen object. 
        for (var name in screen) 
        { 
            var value = screen[name]; 
 
            // If the current value is a number, add it to the array, otherwise 
            // ignore the item. 
            switch (typeof(value)) 
            { 
                case "number": 
                    var tempStr = "screen." + name + "=" + escape(value); 
                    tempArr.push(tempStr); 
                    break; 
            } 
        } 
        // Return the array as a URL-encoded string of name-value pairs. 
        return tempArr.join("&"); 
    } 
</script>

Bu kod, gezgin nesnesindeki tüm ad-değer çiftlerini barındıracak geçici bir dizinin oluşturulmasıyla başlar. Daha sonra gezgin nesnesi üzerinde, for..in döngüsü kullanılarak döngü gerçekleştirilir ve istenmeyen değerlere filtre uygulamak için geçerli değerin veri türü değerlendirilir. Bu uygulamada yalnızca String veya Boolean değerleri dikkate alınır ve diğer veri türleri (örn. işlevler ya da diziler) yoksayılır. Gezgin nesnesindeki her String veya Boolean değeri, tempArr dizisinin sonuna eklenir. Daha sonra tarayıcının ekran nesnesi üzerinde, for..in döngüsü kullanılarak döngü gerçekleştirilir ve sayısal değerlerin her biri tempArr dizisine eklenir. Son olarak, Array.join() yöntemi kullanılarak geçici dizi bir dizeye dönüştürülür. Dizi, ActionScript'in URLVariables sınıfını kullanarak verileri kolayca ayrıştırmasına olanak sağlayacak şekilde, sınırlayıcı olarak ve işaretini (&) kullanır.