Flash CS3 文档 |
|||
| ActionScript 3.0 编程 > 客户端系统环境 > 示例:检测系统功能 | |||
CapabilitiesExplorer 示例说明如何使用 flash.system.Capabilities 类来确定用户的 Flash Player 支持哪些功能。该示例讲授以下方法:
要获取该范例的应用程序文件,请访问 www.adobe.com/go/learn_programmingAS3samples_flash_cn。可以在 Samples/CapabilitiesExplorer 文件夹中找到 CapabilitiesExplorer 应用程序文件。该应用程序包含下列文件:
|
文件 |
说明 |
|---|---|
|
CapabilitiesExplorer.fla 或 CapabilitiesExplorer.mxml |
Flash 或 Flex 中的主应用程序文件(分别为 FLA 和 MXML)。 |
|
com/example/programmingas3/capabilities/CapabilitiesGrabber.as |
用于提供应用程序的主要功能的类,这些主要功能包括在数组中添加系统功能、对项目进行排序以及使用 ExternalInterface 类检索浏览器功能。 |
|
capabilities.html |
包含与外部 API 进行通信所必需的 JavaScript 的 HTML 容器。 |
CapabilitiesExplorer.mxml 文件负责设置 CapabilitiesExplorer 应用程序的用户界面。用户的 Flash Player 功能将显示在舞台上的 DataGrid 组件实例中。如果用户是从 HTML 容器运行应用程序且外部 API 可用,也将显示其浏览器功能。
调度主应用程序文件的 creationComplete 事件时,将调用 initApp() 方法。initApp() 方法从 com.example.programmingas3.capabilities.CapabilitiesGrabber 类中调用 getCapabilities() 方法。initApp() 方法的代码如下所示:
private function initApp():void
{
var dp:Array = CapabilitiesGrabber.getCapabilities();
capabilitiesGrid.dataProvider = dp;
}
CapabilitiesGrabber.getCapabilities() 方法返回排序的 Flash Player 和浏览器功能的数组,然后将其设置为舞台上的 capabilitiesGrid DataGrid 组件实例的 dataProvider 属性。
CapabilitiesGrabber 类的静态 getCapabilities() 方法将 flash.system.Capabilities 类中的每个属性添加到数组 (capDP)。然后调用 CapabilitiesGrabber 类中的静态 getBrowserObjects() 方法。getBrowserObjects() 方法使用外部 API 循环访问浏览器的导航器对象(包含浏览器的功能)。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() 方法返回一个数组,它包含浏览器的导航器对象中的每个属性。如果该数组的长度为一个或多个项目,则将浏览器功能的数组 (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 Player 将调用 JavaScript JS_getBrowserObjects() 方法,该方法循环访问浏览器的导航器对象并向 ActionScript 返回一个 URL 编码的值的字符串。该字符串随后将转换为 URLVariables 对象 (itemVars) 并添加到 itemArr 数组中,将向调用脚本返回该数组。
构建 CapabilitiesExplorer 应用程序的最后一部分是编写循环访问浏览器的导航器对象中每个项目所必需的 JavaScript,并将一个名称-值对追加到临时数组末尾。container.html 文件中的 JavaScript JS_getBrowserObjects() 方法的代码如下所示:
<script language="JavaScript">
function JS_getBrowserObjects()
{
// 创建数组以保存浏览器中的每个项目。
var tempArr = new Array();
// 循环访问浏览器的导航器对象中的每个项目。
for (var name in navigator)
{
var value = navigator[name];
// 如果当前值为字符串或 Boolean 对象,则将其添加到
// 数组中,否则忽略该项目。
switch (typeof(value))
{
case "string":
case "boolean":
// 创建一个将添加到数组中的临时字符串。
// 确保使用 JavaScript 的
// escape() 函数对值进行 URL 编码。
var tempStr = "navigator." + name + "=" + escape(value);
// 将 URL 编码的名称/值对移到数组上。
tempArr.push(tempStr);
break;
}
}
// 循环访问浏览器的屏幕对象中的每个项目。
for (var name in screen)
{
var value = screen[name];
// 如果当前值为数字,则将其添加到数组中,否则
// 忽略该项目。
switch (typeof(value))
{
case "number":
var tempStr = "screen." + name + "=" + escape(value);
tempArr.push(tempStr);
break;
}
}
// 以 URL 编码的名称-值对字符串的形式返回该数组。
return tempArr.join("&");
}
</script>
代码先创建一个临时数组,该数组用于保存导航器对象中的所有名称-值对。接下来,使用 for..in 循环对导航器对象进行循环访问,并求出当前值的数据类型以过滤掉不需要的值。在此应用程序中,我们只需要 String 或 Boolean 值,其它数据类型(例如函数或数组)将被忽略。导航器对象中的每个 String 或 Boolean 值将追加到 tempArr 数组末尾。接下来,使用 for..in 循环对浏览器的屏幕对象进行循环访问,将每个数值添加到 tempArr 数组中。最后,使用 Array.join() 方法将临时数组转换为字符串。该数组使用 (&) 符号作为分隔符,这使得 ActionScript 可以使用 URLVariables 类轻松分析数据。
Flash CS3
当前页: http://livedocs.adobe.com/flash/9.0_cn/main/00000329.html