ADOBE AIR HTML 开发人员指南®®上次更新 2011/10/13 法律声明 法律声明 有关法律声明,请参阅 http://help.adobe.com/zh_CN/legalnotices/index.html。iii 上次更新 2011/10/13 目录 第 1 章 : 关于 HTML 环境 HTML 环境概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 AIR 和 WebKit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 第 2 章 : 在 AIR 中进行 HTML 和 JavaScript 编程 创建基于 HTML 的 AIR 应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 示例应用程序和安全启示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 避免与安全相关的 JavaScript 错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 通过 JavaScript 访问 AIR API 类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 关于 AIR 中的 URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 在 HTML 中嵌入 SWF 内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 在 HTML 页中使用 ActionScript 库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 转换 Date 和 RegExp 对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 跨脚本访问不同安全沙箱中的内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 第 3 章 : 处理 AIR 中与 HTML 相关的事件 HTMLLoader 事件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 AIR 类 - 事件处理与 HTML DOM 中其他事件处理的不同之处 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Adobe AIR 事件对象 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 使用 JavaScript 处理运行时事件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 第 4 章 : 为 AIR HTML 容器编写脚本 HTMLLoader 对象的显示属性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 访问 HTML 历史记录列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 设置在加载 HTML 内容时使用的用户代理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 设置用于 HTML 内容的字符编码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 为 HTML 内容定义类似于浏览器的用户界面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 第 5 章 : 使用矢量 矢量基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 创建矢量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 向矢量中插入元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 检索值和删除矢量元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Vector 对象的属性和方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 示例:使用需要矢量的 AIR API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 第 6 章 : AIR 安全性 AIR 安全性基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 安装和更新 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Adobe AIR 中的 HTML 安全性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63ivADOBE AIR HTML 开发人员指南 目录 上次更新 2011/10/13 通过脚本访问不同域中的内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 写入磁盘 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 安全使用不受信任的内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 开发人员的最佳安全做法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 代码签名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 第 7 章 : 使用 AIR 本机窗口 AIR 中的本机窗口的基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 创建窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 管理窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 侦听窗口事件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 显示全屏窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 第 8 章 : AIR 中的显示屏幕 AIR 中的显示屏幕的基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 枚举屏幕 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 第 9 章 : 使用菜单 菜单基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 创建本机菜单 (AIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 关于 HTML 中的上下文菜单 (AIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 显示弹出本机菜单 (AIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 处理菜单事件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 本机菜单示例:窗口和应用程序菜单 (AIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 使用 MenuBuilder 框架 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 第 10 章 : AIR 中的任务栏图标 关于任务栏图标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 停靠栏图标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 系统任务栏图标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Window 任务栏图标和按钮 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 第 11 章 : 使用文件系统 使用 AIR 文件系统 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 第 12 章 : AIR 中的拖放 HTML 中的拖放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 将数据拖出 HTML 元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 将数据拖入 HTML 元素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 示例:覆盖默认的 HTML 拖入行为 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 在非应用程序 HTML 沙箱中处理文件放置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 放置文件释放 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160vADOBE AIR HTML 开发人员指南 目录 上次更新 2011/10/13 第 13 章 : 复制和粘贴 复制粘贴基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 读取和写入系统剪贴板 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 AIR 中的 HTML 复制和粘贴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 剪贴板数据格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 第 14 章 : 在 AIR 中使用本地 SQL 数据库 关于本地 SQL 数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 创建和修改数据库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 操作 SQL 数据库数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 使用同步和异步数据库操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 对 SQL 数据库使用加密 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 使用 SQL 数据库的策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 第 15 章 : 加密的本地存储区 将数据添加到加密本地存储区 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 访问加密的本地存储区中的数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 从加密的本地存储区中删除数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 第 16 章 : 使用字节数组 读取并写入 ByteArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 ByteArray 示例:读取 .zip 文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 第 17 章 : 在 AIR 中添加 PDF 内容 检测 PDF 功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 加载 PDF 内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 编写 PDF 内容的脚本 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 对 AIR 中的 PDF 内容的已知限制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 第 18 章 : 处理声音 声音处理基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 了解声音体系结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 加载外部声音文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 处理嵌入的声音 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 处理声音流文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 处理动态生成的音频 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 播放声音 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 处理声音元数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 访问原始声音数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 捕获声音输入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248viADOBE AIR HTML 开发人员指南 目录 上次更新 2011/10/13 第 19 章 : 客户端系统环境 客户端系统环境基础知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 使用 System 类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 使用 Capabilities 类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 第 20 章 : AIR 应用程序的调用和终止 应用程序调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 捕获命令行参数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 用户登录时调用 AIR 应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 从浏览器调用 AIR 应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 应用程序终止 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 第 21 章 : 处理 AIR 运行时和操作系统信息 管理文件关联 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 获取运行时版本和修补级别 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 检测 AIR 功能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 跟踪用户当前状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 第 22 章 : 套接字 TCP 套接字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 UDP 套接字 (AIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 IPv6 地址 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 第 23 章 : HTTP 通信 加载外部数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Web 服务请求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 在其他应用程序中打开 URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 向服务器发送 URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 第 24 章 : 与其他 Flash Player 和 AIR 实例通信 关于 LocalConnection 类 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 在两个应用程序之间发送消息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 连接到不同域中的内容和 AIR 应用程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 第 25 章 : 针对 JavaScript 开发人员的 ActionScript 基础知识 ActionScript 和 JavaScript 之间的差异:概述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 ActionScript 3.0 数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 ActionScript 3.0 类、包和命名空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 ActionScript 3.0 函数中的必需参数和默认值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 ActionScript 3.0 事件侦听器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 第 26 章 : 本地数据库中的 SQL 支持 支持的 SQL 语法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 数据类型支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310viiADOBE AIR HTML 开发人员指南 目录 上次更新 2011/10/13 第 27 章 : SQL 错误详细消息、 ID 和参数1 上次更新 2011/10/13 第 1 章 : 关于 HTML 环境 Adobe AIR 1.0 和更高版本 AIR 和 Safari Web 浏览器均使用 WebKit (www.webkit.org) 分析、布局和呈现 HTML 和 JavaScript 内容。AIR 的内置主 机类和对象为传统上与桌面应用程序关联的功能提供了一个 API。这些功能包括读取和写入文件以及管理窗口。 Adobe AIR 还继承了 Adobe® Flash® Player 的 API,其中包括声音和二进制套接字等功能。 重要说明:Adobe AIR 运行时的新版本可能包含 WebKit 的更新版本。AIR 新版本中的 WebKit 更新可能会对已部署的 AIR 应用程序造成意外更改。这些更改可能会影响应用程序中 HTML 内容的行为或外观。例如, WebKit 呈现中的改进或更正可 能会更改应用程序用户界面中元素的布局。为此,我们强烈建议您在应用程序中提供一个更新机制。如果因 AIR 中包含的 WebKit 版本发生更改而需要更新应用程序, AIR 更新机制可提示用户安装应用程序的新版本。 下表列出了所使用的 WebKit 版本与 AIR 中使用的 WebKit 版本相同的 Safari Web 浏览器版本: 您始终可以通过检查由 HTMLLoader 对象返回的默认用户代理字符串来确定 WebKit 的已安装版本: air.trace( window.htmlLoader.userAgent ); 请记住,AIR 中使用的 WebKit 版本与开放源版本不同。AIR 中不支持某些功能,并且 AIR 版本可以包括在相应 WebKit 版 本中尚不可用的安全性和错误修复功能。请参阅 第 13 页的 “AIR 中不支持的 WebKit 功能 ”。 在 HTML 内容中使用 AIR API 是完全可选的。您可以完全使用 HTML 和 JavaScript 编写 AIR 应用程序。大多数现有 HTML 应用程序只需少量更改即可运行(假定它们使用的 HTML、 CSS、 DOM 和 JavaScript 功能与 WebKit 兼容)。 AIR 授予您对应用程序外观的完全控制权限。您可以使应用程序的外观类似于本机桌面应用程序。还可以关闭由操作系统提供 的窗口镶边,并实现您自己的用于移动窗口、调整窗口大小和关闭窗口的控件。您甚至可以在没有窗口的情况下运行。 由于 AIR 应用程序直接在桌面上运行,且具有对文件系统的完全访问权限,因此,对应的安全模型比典型 Web 浏览器的安全 模型更加严格。在 AIR 中,只有从应用程序安装目录加载的内容才会被放置到应用程序沙箱 中。应用程序沙箱具有最高级别 的权限,且允许访问 AIR API。AIR 根据其他内容的来源将这些内容放置到隔离沙箱中。从文件系统加载的文件放置到本地沙 箱中。使用 http: 或 https: 协议从网络加载的文件则根据远程服务器的域放置到相应沙箱中。禁止这些非应用程序沙箱中的内 容访问任何 AIR API,且其运行方式与在典型 Web 浏览器中几乎一样。 如果应用 Alpha、缩放或透明度设置,则 AIR 中的 HTML 内容不显示 SWF 或 PDF 内容。有关详细信息,请参阅第 42 页的 “ 在 HTML 页中加载 SWF 或 PDF 内容时的注意事项 ” 和第 76 页的 “ 窗口透明度 ”。 更多帮助主题 Webkit DOM 参考 Safari HTML 参考 Safari CSS 参考 www.webkit.org AIR 版本 Safari 版本 1.0 2.04 1.1 3.04 1.5 4.0 测试版 2.0 4.03 2.5 4.03 2.6 4.03 2.7 4.03 3 5.0.32ADOBE AIR HTML 开发人员指南 关于 HTML 环境 上次更新 2011/10/13 HTML 环境概述 Adobe AIR 1.0 和更高版本 Adobe AIR 使用 HTML 渲染器、文档对象模型和 JavaScript 解释程序提供与浏览器完全相似的 JavaScript 环境。 JavaScript 环境通过 AIR HTMLLoader 类表示。在 HTML 窗口中,HTMLLoader 对象包含所有 HTML 内容,而该对象 又包含在 NativeWindow 对象中。通过 NativeWindow 对象,应用程序可以为用户桌面上显示的本机操作系统窗口的属性和 行为撰写脚本。 关于 JavaScript 环境及其与 AIR 主机之间的关系 Adobe AIR 1.0 和更高版本 下图演示了 JavaScript 环境和 AIR 运行时环境的关系。虽然只显示了一个本机窗口,但是一个 AIR 应用程序可以包含多个窗 口。(并且一个窗口可以包含多个 HTMLLoader 对象。) JavaScript 环境具有其自己的 Document 和 Window 对象。JavaScript 代码可以通过 runtime、nativeWindow 和 htmlLoader 属性与 AIR 运行时环 境交互。 ActionScript 代码可以通过 HTMLLoader 对象的 window 属性与 JavaScript 环境交互,该属性是对 JavaScript Window 对象的引用。此外, ActionScript 和 JavaScript 对象均可以侦听由 AIR 和 JavaScript 对象调度的事件。 runtime 属性提供了对 AIR API 类的访问权限,使您可以新建 AIR 对象和访问类(也称为静态)成员。若要访问 AIR API, 请向 runtime 属性添加该类的名称和包。例如,若要创建 File 对象,您将使用以下语句: var file = new window.runtime.filesystem.File(); AIR 䖤㸠ᯊ⦃๗ NativeWindow HTMLLoader JavaScript ⦃๗ window window document body h1 div p table head htmlLoader nativeWindow 䖤㸠ᯊ3ADOBE AIR HTML 开发人员指南 关于 HTML 环境 上次更新 2011/10/13 注: AIR SDK 提供了一个 JavaScript 文件,即 AIRAliases.js,该文件为最常用的 AIR 类定义了更便于使用的别名。导入该文 件时,您可以使用 air.Class 简短形式替换 window.runtime.package.Class。例如,您可以使用 new air.File() 创建 File 对象。 NativeWindow 对象提供了用于控制桌面窗口的属性。您可以使用 window.nativeWindow 属性从 HTML 页内部访问包含的 NativeWindow 对象。 HTMLLoader 对象提供了用于控制内容的加载方式和呈现方式的属性、方法和事件。您可以使用 window.htmlLoader 属性从 HTML 页内部访问父 HTMLLoader 对象。 重要说明: 仅当作为应用程序的一部分安装的页作为顶级文档加载时,该页才具有 htmlLoader、 nativeWindow 或 runtime 属 性。将文档加载到 frame 或 iframe 中时不会添加这些属性。(只要子文档与父文档位于相同安全沙箱中,子文档即可访问父文 档的这些属性。例如,加载到 frame 中的文档可以使用 parent.runtime 访问其父级的 runtime 属性。) 关于安全性 Adobe AIR 1.0 和更高版本 AIR 根据原始域在安全沙箱中执行所有代码。应用程序内容限制为从应用程序安装目录加载的内容,该内容放置到应用程序 沙 箱中。只有在此沙箱中运行的 HTML 和 JavaScript 才能访问运行时环境和 AIR API。同时,在页 load 事件的所有处理函数返 回之后,将在应用程序沙箱中阻止 JavaScript 的大多数动态计算和执行操作。 通过将应用程序页加载到 frame 或 iframe 中,并对 frame 设置特定于 AIR 的 sandboxRoot 和 documentRoot 属性,可以将该 应用程序页映射到非应用程序沙箱中。通过将 sandboxRoot 值设置为实际远程域,您可以使沙箱中的内容跨脚本访问该域中的 内容。当加载远程内容或撰写远程内容脚本时(例如,在 mash-up 应用程序中),使用上述方法映射页非常有用。 允许应用程序和非应用程序内容相互跨脚本访问的另一方法是创建沙箱桥,这也是向 AIR API 授予非应用程序内容访问权限 的唯一方法。使用父级到子级 桥,子 frame、 iframe 或窗口中的内容能够访问在应用程序沙箱中定义的指定方法和属性。反 之,使用子级到父级 桥,应用程序内容能够访问在子级的沙箱中定义的指定方法和属性。通过设置窗口对象的 parentSandboxBridge 和 childSandboxBridge 属性可以建立沙箱桥。有关详细信息,请参阅 第 63 页的 “Adobe AIR 中的 HTML 安全性 ” 以及 第 10 页的 “HTML frame 和 iframe 元素 ”。 关于插件和嵌入对象 Adobe AIR 1.0 和更高版本 AIR 支持 Adobe® Acrobat® 插件。用户必须安装有 Acrobat 或 Adobe® Reader® 8.1 (或更高版本)才能显示 PDF 内容。 HTMLLoader 对象提供了用于查看用户系统是否可以显示 PDF 的属性。 SWF 文件内容也可以在 HTML 环境中显示,但 AIR 中构建有此功能,因此无需使用外部插件。 AIR 中不支持任何其他 WebKit 插件。 更多帮助主题 第 63 页的 “Adobe AIR 中的 HTML 安全性 ” 第 4 页的 “HTML 沙箱 ” 第 10 页的 “HTML frame 和 iframe 元素 ” 第 8 页的 “JavaScript Window 对象 ” 第 5 页的 “XMLHttpRequest 对象 ” 第 231 页的 “ 在 AIR 中添加 PDF 内容 ”4ADOBE AIR HTML 开发人员指南 关于 HTML 环境 上次更新 2011/10/13 AIR 和 WebKit Adobe AIR 1.0 和更高版本 Adobe AIR 中使用开放源代码 WebKit 引擎,该引擎也用于 Safari Web 浏览器。 AIR 添加了若干扩展功能,以便允许访问 运行时类和对象,并增强了安全性。此外, WebKit 自身还针对 HTML、CSS 和 JavaScript 添加了 W3C 标准中不包括的功 能。 此处仅包含 AIR 新增功能和最显著的 WebKit 扩展功能;有关非标准 HTML、 CSS 和 JavaScript 的其他文档,请参阅 www.webkit.org 和 developer.apple.com。有关标准信息,请参阅 W3C 网站。 Mozilla 还提供了有关 HTML、 CSS 和 DOM 主题的重要一般参考 (当然, WebKit 引擎不同于 Mozilla 引擎)。 AIR 中的 JavaScript Flash Player 9 和更高版本, Adobe AIR 1.0 和更高版本 AIR 对通用 JavaScript 对象的典型行为进行了若干更改。其中,很多更改都是为了在 AIR 中更方便地编写安全应用程序。同 时,这些行为差异表示某些通用 JavaScript 编码模式和使用这些模式的现有 Web 应用程序在 AIR 中可能始终不会按预期方式 执行。有关更正这些问题类型的信息,请参阅第 20 页的 “ 避免与安全相关的 JavaScript 错误 ”。 HTML 沙箱 Adobe AIR 1.0 和更高版本 AIR 根据内容的原始位置将该内容放置到隔离沙箱中。沙箱规则与大多数 Web 浏览器实现的具有相同原始位置的策略一致, 并且与 Adobe Flash Player 实现的沙箱规则一致。此外, AIR 还提供了一个包含并保护应用程序内容的新应用程序 沙箱类 型。有关在开发 AIR 应用程序时可能遇到的沙箱类型的详细信息,请参阅安全性沙箱。 只有在应用程序沙箱中运行的 HTML 和 JavaScript 才能访问运行时环境和 AIR API。但同时,出于安全原因,动态计算和执 行各种形式的 JavaScript 在应用程序沙箱内大幅受限。无论您的应用程序实际上是否从服务器直接加载信息,这些限制都将发 挥作用。(即使是文件内容、粘贴的字符串和直接用户输入也可能不可靠。) 页内容的原始位置确定要将该内容放置到哪个沙箱。只能将从应用程序目录( app: URL 方案引用的安装目录)加载的内容放 置到应用程序沙箱中。从文件系统加载的内容则放置到与本地文件系统内容交互的 沙箱或受信任的本地 沙箱中,以便访问本地 文件系统上的内容(而不是远程内容),并与其进行交互。从网络加载的内容则放置到与其原始域对应的远程沙箱中。 若要使应用程序页与远程沙箱中的内容自由交互,则可以将该页映射到远程内容所在的相同域中。例如,如果编写显示 Internet 服务的映射数据的应用程序,则可以将加载和显示该服务内容的应用程序页映射到该服务域中。用于将页映射到远程 沙箱和域的属性是 frame 和 iframe HTML 元素的新增属性。 若要使非应用程序沙箱中的内容安全地使用 AIR 功能,则可以设置父沙箱桥。若要使应用程序内容安全地调用其他沙箱中的内 容的方法并访问其属性,则可以设置子沙箱桥。此处所述的安全性意味着远程内容不能意外获取对未明确公开的对象、属性或 方法的引用。通过沙箱桥只能传递简单数据类型、函数和匿名对象。但是,您仍然必须避免明确公开潜在的危险函数。例如, 如果公开的接口允许远程内容读取或写入用户系统中任意位置的文件,则可能会使远程内容严重危害用户。 JavaScript eval() 函数 Adobe AIR 1.0 和更高版本 完成加载页之后,将在应用程序沙箱中限制使用 eval() 函数。在某些情况下允许使用该函数,以便可以安全地分析 JSON 格式 数据,但是,生成可执行语句的任何计算将生成错误。第 65 页的 “ 对不同沙箱中的内容的代码限制 ” 介绍了允许使用 eval() 函 数的情况。 5ADOBE AIR HTML 开发人员指南 关于 HTML 环境 上次更新 2011/10/13 函数构造函数 Adobe AIR 1.0 和更高版本 在应用程序沙箱中,可以在完成加载页之前使用函数构造函数。在所有页 load 事件处理函数完成之后,无法创建新的函数。 加载外部脚本 Adobe AIR 1.0 和更高版本 应用程序沙箱中的 HTML 页无法使用 script 标签从应用程序目录外部加载 JavaScript 文件。为使应用程序中的页能够从应用 程序目录外部加载脚本,必须将该页映射到非应用程序沙箱。 XMLHttpRequest 对象 Adobe AIR 1.0 和更高版本 AIR 提供了应用程序可用于执行数据请求的 XMLHttpRequest (XHR) 对象。下面的示例演示简单数据请求: xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", "http:/www.example.com/file.data", true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { //do something with data... } } xmlhttp.send(null); 与浏览器不同,AIR 允许在应用程序沙箱中运行的内容请求任何域中的数据。对于包含 JSON 字符串的 XHR 结果,除非该结 果还包含可执行代码,否则可以计算出该结果的数据对象。如果 XHR 结果中存在可执行语句,则会引发错误,且计算尝试失 败。 若要防止从远程源意外注入代码,在完成加载页之前执行同步 XHR 时将返回空结果。异步 XHR 将始终在加载页之后返回。 默认情况下, AIR 阻止在非应用程序沙箱中执行跨域 XMLHttpRequest。应用程序沙箱中的父窗口可以选择在包含非应用程 序沙箱内容的子 frame 中允许跨域请求,方法是在包含非应用程序沙箱内容的 frame 或 iframe 元素中将 AIR 添加的 allowCrossDomainXHR 属性设置为 true: