Przykład dotyczący możliwości: wykrywanie możliwości systemuFlash Player 9 i nowsze wersje Przykład CapabilitiesExplorer ilustruje wykorzystanie klasy flash.system.Capabilities do sprawdzania, jakie funkcje obsługuje wersja środowiska wykonawczego Flash, z której korzysta użytkownik. W przykładzie zastosowano następujące techniki:
Aby pobrać pliki tej przykładowej aplikacji, należy przejść na stronę www.adobe.com/go/learn_programmingAS3samples_flash_pl. Pliki aplikacji CapabilitiesExplorer znajdują się w folderze Samples/CapabilitiesExplorer. Aplikacja składa się z następujących plików:
Przegląd aplikacji CapabilitiesExplorerPlik CapabilitiesExplorer.mxml ma za zadanie przygotowanie interfejsu użytkownika dla aplikacji CapabilitiesExplorer. Możliwości wersji środowiska wykonawczego Flash używanej przez użytkownika będą wyświetlane w składniku DataGrid na stole montażowym. Zostaną także wyświetlone możliwości przeglądarki użytkownika, jeśli aplikacja jest uruchamiana w kontenerze HTML i dostępny jest zewnętrzny interfejs API. Po wywołaniu zdarzenia creationComplete głównego pliku aplikacji wywoływana jest metoda initApp(). Metoda initApp() wywołuje metodę getCapabilities() z klasy com.example.programmingas3.capabilities.CapabilitiesGrabber. Oto kod metody initApp(): private function initApp():void
{
var dp:Array = CapabilitiesGrabber.getCapabilities();
capabilitiesGrid.dataProvider = dp;
}
Metoda CapabilitiesGrabber.getCapabilities() zwraca posortowaną tablicę informacji o możliwościach środowiska wykonawczego Flash oraz przeglądarki. Tablica ta jest następnie wpisywana do właściwości dataProvider składnika DataGrid o nazwie capabilitiesGrid umieszczonego na stole montażowym. Przegląd klasy CapabilitiesGrabberStatyczna metoda getCapabilities() klasy CapabilitiesGrabber dodaje właściwość z klasy flash.system.Capabilities do tablicy (capDP). Następnie wywołuje statyczną metodę getBrowserObjects() w klasie CapabilitiesGrabber. Metoda getBrowserObjects() wykorzystuje zewnętrzny interfejs API do przeglądania w pętli obiektu navigator przeglądarki. Obiekt ten zawiera informacje o możliwościach przeglądarki. Metoda getCapabilities() ma następującą postać: 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;
}
Metoda getBrowserObjects() zwraca tablice dla poszczególnych właściwości w obiekcie navigator przeglądarki. Jeśli tablica ma co najmniej jeden element, informacja o możliwościach przeglądarki (navArr) jest dopisywana to tablicy możliwości programu Flash Player capDP), a cała tablica jest sortowana alfabetycznie. Na koniec posortowana tablica jest zwracana do głównego pliku aplikacji, który zapełnia widoczną tabelę danych. Oto kod metody getBrowserObjects(): 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;
}
Jeśli w bieżącym środowisku użytkownika jest dostępny zewnętrzny interfejs API, środowisko wykonawcze Flash wywołuje metodę JavaScript JS_getBrowserObjects(), która w pętli przegląda obiekt navigator przeglądarki i zwraca do kodu ActionScript ciąg wartości zakodowanych jako adresy URL. Ten ciąg jest następnie konwertowany na obiekt URLVariables (itemVars) i dodawany do tablicy itemArr, która zostaje zwrócona do skryptu wywołującego. Komunikacja z kodem JavaScriptOstatnim etapem budowy aplikacji CapabilitiesExplorer jest napisanie kodu JavaScript potrzebnego do przeglądania elementów w obiekcie navigator przeglądarki i dołączania par nazwa-wartość do tablicy tymczasowej. Metoda JavaScript JS_getBrowserObjects() w pliku container.html ma następującą postać: <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>
Na początku kodu tworzona jest tymczasowa tablica, w której będą przechowywane wszystkie pary nazwa-wartość z obiektu navigator. Następnie obiekt navigator jest przeglądany przy użyciu pętli for..in, a typy danych poszczególnych wartości są filtrowane w celu wyeliminowania wartości niepożądanych. W tej aplikacji interesują nas wartości typu String i Boolean, a pozostałe typy danych (takie jak funkcje i tablice) są ignorowane. Każda wartość String lub Boolean w obiekcie navigator jest dopisywana do tablicy tempArr. Następnie obiekt screen przeglądarki jest przeglądany przy użyciu pętli for..in, a wszystkie wartości liczbowe są dodawane do tablicy tempArr. Na koniec tablica tymczasowa jest konwertowana na ciąg znaków przy użyciu metody Array.join(). W tablicy rolę ogranicznika pełni znak ampersand (&), dzięki czemu kod ActionScript może łatwo przeanalizować dane przy użyciu klasy URLVariables. |
|