|
Erkennen der FlashPlayer capabilities mittels describeType() |
|
Monday, 21. January 2008 |
|
Ich arbeite an einer soliden Bug Reporting Funktionalität für G-Nero und stolperte über das AS3 Package flash.system.Capabilities und versuchte den "guten alten Weg" (AS2 alike) und bekam kein Ergebnis. Also nahm ich den neuen Stil und versuchte auf die Eigenschaften (screenDPI, hasAccessibility, ...) zuzugreifen mittels einer "for each" Schleife und... Ich scheiterte. Adobe selbst hat einen Artikel auf LiveDocs mit einem enthaltenen Beispiel welches ein Array mit die Eigenschaften enthält, welche abgefragt werden sollen. Da dies nicht wirklich flexibel ist und nicht sehr brauchbar für zukünftige Versionen des Flash Players ist habe ich mich entschieden es mit der neuen Methode zu versuchen: describeType()
Adobe's Beispiel
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;
}
Neuer Stil mit describeType()-Methode
var flashPlayerData:Array = new Array();
var objectType:XML = describeType(flash.system.Capabilities);
var excludedProperties:Array = ["_internal", "serverString", "prototype"];
for each(var objectProperties:XML in objectType.accessor){
var propertyName:String = objectProperties.@name;
var isExcluded:Boolean = false;
for(var c:uint = 0; c < excludedProperties.length; c++){
var excludedName:String = excludedProperties[c];
if(propertyName == excludedName){
isExcluded = true;
break;
}
}
if(!isExcluded){
var propertyValue:String = flash.system.Capabilities[propertyName];
flashPlayerData.push({name: propertyName, value: propertyValue});
}
}
flashPlayerData.sortOn("name", Array.CASEINSENSITIVE);
Ich denke das ist ein gutes Beispiel wo die neue Methode bestens zum Einsatz kommt.
Trackback(0)
|