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