Capabilities-Beispiel: Ermitteln von SystemeigenschaftenFlash 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:
Die Anwendungsdateien für dieses Beispiel finden Sie auf 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:
Ü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-KlasseMit 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 JavaScriptBei 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. |
|