CapabilitiesGrabber 類別的靜態
getCapabilities()
方法會將來自 flash.system.Capabilities 類別的每個屬性都加入陣列中 (
capDP
)。接著,它會呼叫 CapabilitiesGrabber 類別中的靜態
getBrowserObjects()
方法。
getBrowserObjects()
方法會使用外部 API,以循環執行瀏覽器的 navigator 物件,此物件中包含瀏覽器的功能。
getCapabilities()
方法如下所示:
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;
}
getBrowserObjects()
方法會傳回瀏覽器之 navigator 物件中每一個屬性的陣列。如果這個陣列的長度為一個或多個項目,則瀏覽器功能陣列 (
navArr
) 就會附加至 Flash Player 功能陣列 (
capDP
),然後整個陣列再依照字母進行排序。最後,經過排序的陣列會傳回至主應用程式檔案,再將這個檔案填入資料格點。
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;
}
如果目前的使用者環境中可以使用外部 API,Flash 執行階段便會呼叫 JavaScript 的
JS_getBrowserObjects()
方法,循環執行瀏覽器的 navigator 物件,並將經過 URL 編碼的字串值傳回至 ActionScript。然後這個字串便會轉換為 URLVariables 物件 (
itemVars
),並加入
itemArr
陣列中,而此陣列會傳回至呼叫端指令碼。