示例应用程序和安全启示

Adobe AIR 1.0 和更高版本

以下 HTML 代码使用文件系统 API 来列出用户的桌面目录中的文件和目录。

以下是该应用程序的 HTML 代码:

<html> 
    <head> 
        <title>Sample application</title> 
        <script type="text/javascript" src="AIRAliases.js"></script> 
        <script> 
            function getDesktopFileList() 
            { 
                var log = document.getElementById("log"); 
                var files = air.File.desktopDirectory.getDirectoryListing(); 
                for (i = 0; i < files.length; i++) 
                { 
                    log.innerHTML += files[i].name + "<br/>"; 
                } 
            } 
        </script> 
    </head>     
    <body onload="getDesktopFileList();" style="padding: 10px"> 
        <h2>Files and folders on the desktop:</h2>             
        <div id="log" style="width: 450px; height: 200px; overflow-y: scroll;" /> 
    </body> 
</html>

还必须创建应用程序描述符文件,并使用 AIR Debug Launcher (ADL) 应用程序对该应用程序进行测试。

大多数示例代码可在 Web 浏览器中使用。但是,有一些代码行是特定于运行时的。

getDesktopFileList() 方法使用 File 类,该类在运行时 API 中进行定义。应用程序中的第一个 script 标签加载 AIRAliases.js 文件(随 AIR SDK 一起提供),通过该文件可轻松访问 AIR API。(例如,示例代码使用 air.File 语法访问 AIR File 类。)有关详细信息,请参阅 使用 AIRAliases.js 文件

File.desktopDirectory 属性为 File 对象(一类由运行时定义的对象)。File 对象是对用户计算机中的文件或目录的引用。 File.desktopDirectory 属性是对用户桌面目录的引用。对所有 File 对象均定义了 getDirectoryListing() 方法,并返回 File 对象的数组。 File.desktopDirectory.getDirectoryListing() 方法返回表示用户桌面上的文件和目录的 File 对象的数组。

每个 File 对象都具有一个 name 属性,该属性表示文件名,以字符串的形式表示。 getDesktopFileList() 方法中的 for 循环遍历用户桌面目录中的文件和目录,并将其名称追加到应用程序 div 对象的 innerHTML 属性中。

在 AIR 应用程序中使用 HTML 的重要安全规则

随 AIR 应用程序一起安装的文件能够访问 AIR API。出于安全方面的考虑,来自其他源的内容不能访问 AIR API。例如,此限制将阻止远程域(例如 http://example.com)中的内容读取用户桌面目录中的内容(也可能是更严重的情况)。

由于存在可通过调用 eval() 函数(及相关 API)来利用的安全漏洞,因此,默认情况下限制使用这些方法。但是,某些 Ajax 框架会调用 eval() 函数和相关 API。

为确保结构内容在 AIR 应用程序中能够正常工作,必须考虑对来自不同源的内容制订相应的安全限制规则。来自不同源的内容分别放置在不同的安全性分类中,称为沙箱(请参阅 安全沙箱 )。默认情况下,随应用程序一起安装的内容安装在称为 应用程序 的沙箱中,这将授予该内容访问 AIR API 的权限。应用程序沙箱通常是最安全的沙箱,设计了一些限制,可阻止不受信任代码的执行。

运行时允许将随应用程序一起安装的内容加载到应用程序沙箱之外的沙箱中。非应用程序沙箱中的内容在类似于典型 Web 浏览器的安全环境中运行。例如,非应用程序沙箱中的代码可以使用 eval() 和相关方法(但不允许该代码访问 AIR API)。运行时包含有相关方法,可以让不同沙箱中的内容安全地进行通信(例如,不将 AIR API 公开给非应用程序内容)。有关详细信息,请参阅 跨脚本访问不同安全沙箱中的内容

如果出于安全方面的考虑,限制在沙箱中使用所调用的代码,则运行时将调度 JavaScript 错误:“Adobe AIR runtime security violation for JavaScript code in the application security sandbox”(应用程序安全沙箱中存在针对 JavaScript 代码的 Adobe AIR 运行时安全侵犯)。

为了避免此错误,请按照下一部分 避免与安全相关的 JavaScript 错误 中介绍的代码编写方法进行操作。

有关详细信息,请参阅 Adobe AIR 中的 HTML 安全性