Exempel på egenskaper: identifera systemegenskaperFlash 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:
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:
Översikt över CapabilitiesExplorerFilen 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 CapabilitiesGrabberDen 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 JavaScriptDet 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. |
|