Capabilities-Beispiel: Ermitteln von Systemeigenschaften

Flash Player 9 und höher

Mit der Beispielanwendung „CapabilitiesExplorer“ wird veranschaulicht, wie Sie mithilfe der flash.system.Capabilities-Klasse die Funktionen ermitteln können, die die Version der Flash-Laufzeitumgebung des Benutzers unterstützt. In diesem Beispiel werden die folgenden Verfahren vermittelt:

  • Ermitteln der in der Flash-Laufzeitumgebungsversion des Benutzers unterstützten Funktionen mithilfe der Capabilities-Klasse

  • Verwenden der ExternalInterface-Klasse zum Ermitteln der im Browser des Benutzers unterstützten Einstellungen

Die Anwendungsdateien für dieses Beispiel finden Sie unter www.adobe.com/go/learn_programmingAS3samples_flash_de . Die Dateien der Anwendung „CapabilitiesExplorer“ befinden sich im Ordner „Samples/CapabilitiesExplorer“. Die Anwendung umfasst die folgenden Dateien:

Datei

Beschreibung

CapabilitiesExplorer.fla

oder

CapabilitiesExplorer.mxml

Die Hauptanwendungsdatei im Flash-Format (FLA) oder Flex-Format (MXML).

com/example/programmingas3/capabilities/CapabilitiesGrabber.as

Die Klasse mit den Hauptfunktionen der Anwendung, einschließlich Hinzufügen der Systeminformationen zu einem Array, Sortieren der Elemente und Abrufen der Browserinformationen mit der ExternalInterface-Klasse.

capabilities.html

Ein HTML-Container mit dem für die Verbindung mit der externen API erforderlichen JavaScript-Code.

Überblick über die Anwendung „CapabilitiesExplorer“

Die Datei „CapabilitiesExplorer.mxml“ dient zum Einrichten der Benutzeroberfläche für die Anwendung „CapabilitiesExplorer“. Die Eigenschaften der Flash-Laufzeitumgebungsversion des Benutzers werden in einer DataGrid-Komponenteninstanz auf der Bühne angezeigt. Wenn die Anwendung über einen HTML-Container ausgeführt wird und die externe API verfügbar ist, werden auch die Browserinformationen angezeigt.

Wenn das creationComplete -Ereignis in der Datei der Hauptanwendung ausgelöst wurde, wird die initApp() -Methode aufgerufen. Mit der initApp() -Methode wird die getCapabilities() -Methode über die com.example.programmingas3.capabilities.CapabilitiesGrabber-Klasse aufgerufen. Der Code für die initApp() -Methode lautet wie folgt:

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

Die CapabilitiesGrabber.getCapabilities() -Methode gibt ein sortiertes Array mit Informationen zur Flash-Laufzeitumgebung und zum Browser zurück, das dann an die dataProvider -Eigenschaft der DataGrid-Komponenteninstanz capabilitiesGrid auf der Bühne übergeben wird.

Überblick über die CapabilitiesGrabber-Klasse

Mit der statischen getCapabilities() -Methode der CapabilitiesGrabber-Klasse werden alle Eigenschaften der flash.system.Capabilities-Klasse zu einem Array ( capDP ) hinzugefügt. Dann wird die statische getBrowserObjects() -Methode der CapabilitiesGrabber-Klasse aufgerufen. Bei der getBrowserObjects() -Methode wird mithilfe der externen API das Navigatorobjekt des Browsers durchlaufen, das die Browserinformationen enthält. Die getCapabilities() -Methode lautet wie folgt:

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

Die getBrowserObjects() -Methode gibt ein Array aller Eigenschaften im Navigatorobjekt des Browsers zurück. Wenn dieses Array mindestens ein Element aufweist, wird das Array der Browserinformationen ( navArr ) an das Array der Flash Player-Informationen ( capDP ) angehängt. Das gesamte Array wird dann alphabetisch sortiert. Das sortierte Array wird schließlich an die Datei der Hauptanwendung zurückgegeben, die dann das Datenraster füllt. Der Code für die getBrowserObjects() -Methode lautet wie folgt:

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

Wenn die externe API in der aktuellen Umgebung des Benutzers verfügbar ist, wird in der Flash-Laufzeitumgebung die JavaScript-Methode JS_getBrowserObjects() aufgerufen, mit der dann das Navigatorobjekt des Browsers durchlaufen und ein String mit URL-kodierten Werten an ActionScript zurückgegeben wird. Dieser String wird dann in ein URLVariables-Objekt umgewandelt ( itemVars ) und zum itemArr -Array hinzugefügt, das an das aufrufende Skript zurückgegeben wird.

Kommunikation mit JavaScript

Bei der Erstellung der Anwendung „CapabilitiesExplorer“ muss abschließend der nötige JavaScript-Code geschrieben werden, mit dem die einzelnen Elemente im Navigatorobjekt des Browsers durchlaufen werden sowie ein Name-Wert-Paar an ein temporäres Array angehängt wird. Der Code für die JavaScript-Methode JS_getBrowserObjects() in der Datei „container.html“ lautet wie folgt:

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

Im Code wird zunächst ein temporäres Array erstellt, das alle Name-Wert-Paare des Navigatorobjekts enthält. Als Nächstes wird das Navigatorobjekt mit der for..in -Schleife durchlaufen und der Datentyp des aktuellen Werts geprüft, um unerwünschte Werte zu filtern. In dieser Anwendung werden nur String- oder Boolean-Werte berücksichtigt. Andere Datentypen (z. B. Funktionen oder Arrays) werden dagegen außer Acht gelassen. Alle String- oder Boolean-Werte im Navigatorobjekt werden an das tempArr -Array angehängt. Als Nächstes wird das Bildschirmobjekt des Browsers mit einer for..in -Schleife durchlaufen und jeder numerische Wert wird zum tempArr -Array hinzugefügt. Schließlich wird das temporäre Array mit der Array.join() -Methode in einen String umgewandelt. Im Array werden Und-Zeichen (&) als Trennzeichen verwendet. Dadurch können die Daten in ActionScript mit der URLVariables-Klasse analysiert werden.