Exempel på egenskaper: identifera systemegenskaper

Flash Player 9 och senare

Exemplet CapabilitiesExplorer visar hur du kan använda klassen flash.system.Capabilities för att kontrollera vilka funktioner som stöds i användarens version av Flash-körningen. I exemplet visas följande tekniker:

  • Identifiera vilka egenskaper användarens version av Flash-körningen stöder genom att använda klassen Capabilities

  • Använda klassen ExternalInterface för att känna av vilka webbläsarinställningar användarens webbläsare stöder

Programfilerna för det här exemplet finns på www.adobe.com/go/learn_programmingAS3samples_flash_se. CapabilitiesExplorer-programfilerna finns i mappen Samples/CapabilitiesExplorer. Programmet består av följande filer:

File

Beskrivning

CapabilitiesExplorer.fla

eller

CapabilitiesExplorer.mxml

Huvudprogramfilen i Flash (FLA) eller Flex (MXML).

com/example/programmingas3/capabilities/CapabilitiesGrabber.as

Klassen som tillhandahåller programmets huvudfunktioner, inklusive att lägga till systemegenskaperna till en array, sortera objekten och använda klassen ExternalInterface för att hämta webbläsaregenskaper.

capabilities.html

En HTML-behållare som innehåller nödvändigt JavaScript för att kommunicera med det externa API:t.

Översikt över CapabilitiesExplorer

Filen CapabilitiesExplorer.mxml ansvarar för att ställa in användargränssnittet för programmet CapabilitiesExplorer. Funktionerna i användarens version av Flash-körningen visas i en instans av en DataGrid-komponent på scenen. Användarens webbläsaregenskaper visas också om användaren kör programmet från en HTML-behållare och om det externa API:t är tillgängligt.

När huvudprogramfilens händelse creationComplete skickas, anropas metoden initApp(). Metoden initApp() anropar metoden getCapabilities() från klassen com.example.programmingas3.capabilities.CapabilitiesGrabber. Koden för metoden initApp() är följande:

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

Metoden CapabilitiesGrabber.getCapabilities() returnerar en sorterad array med Flash-körningens och webbläsarens egenskaper, som sedan ställs in på egenskapen dataProvider för DataGrid-komponentinstansen capabilitiesGrid på scenen.

Översikt över klassen CapabilitiesGrabber

Den statiska metoden getCapabilities() i klassen CapabilitiesGrabber lägger till alla egenskaper från klassen flash.system.Capabilities till en array (capDP). Sedan anropar den statiska metoden getBrowserObjects() i klassen CapabilitiesGrabber. Metoden getBrowserObjects() använder det externa API:t för att göra en slinga över webbläsarens navigerarobjekt, som innehåller webbläsarens egenskaper. Koden för metoden getCapabilities() är följande:

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

Metoden getBrowserObjects() returnerar en array med alla egenskaper i webbläsarens navigerarobjekt. Om arrayen omfattar minst ett objekt, bifogas arrayen med webbläsaregenskaper (navArr) till arrayen med Flash Player-egenskaper (capDP) och sedan sorteras hela arrayen i alfabetisk ordning. Slutligen returneras den sorterade arrayen till huvudprogramfilen, som fyller datarastret. Koden för metoden getBrowserObjects() är följande:

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

Om det externa API:t är tillgängligt i den aktuella användarmiljön, anropar Flash-körningen JavaScript-metoden JS_getBrowserObjects(), som gör en slinga över webbläsarens navigerarobjekt och returnerar en sträng med URL-kodade värden till ActionScript. Strängen konverteras sedan till ett URLVariables-objekt (itemVars) och läggs in i arrayen itemArr, som returneras till det anropande skriptet.

Kommunicera med JavaScript

Det sista momentet när du skapar CapabilitiesExplorer-programmet går ut på att skriva den JavaScript-kod som gör en slinga över objekten i webbläsarens navigerarobjekt och bifogar ett namnvärdepar till en tillfällig array. Koden för JavaScript-metoden JS_getBrowserObjects() i filen container.html är följande:

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

Koden inleds med att skapa en tillfällig array som ska innehålla alla namnvärdepar i navigerarobjektet. Sedan görs en slinga över navigerarobjektet med en for..in-slinga, och datatypen för det aktuella värdet utvärderas för att filtrera bort oönskade värden. I det här programmet är vi bara intresserade av String- och Boolean-värden. Övriga datatyper (som funktioner och arrayer) ignoreras. Varje String- eller Boolean-värde i navigerarobjektet bifogas till arrayen tempArr. Sedan görs en slinga över webbläsarobjektet med hjälp av en for..in-slinga och alla numeriska värden läggs till i arrayen tempArr. Slutligen konverteras den tillfälliga arrayen till en sträng med metoden Array.join(). Arrayen använder ett et-tecken (&) som avgränsare, vilket gör att ActionScript enkelt kan analysera data med hjälp av klassen URLVariables.