第 9 章 Ja v a S c r ip t 概 览
如 果 你 认 为 在 W e b 站 点 上 使 用 A c tiv e X 控 件 可 以 摆 脱 脚 本 那 么 就 请 忘掉 这 个 不 切 实 际 的 想 法 吧 事 实 上 A c tiv e X 控 件 比 起 其 它 种 类 的 W e b 接 口 元素 来 说 更 加 依 赖 于 脚 本 理 论 上 你 可 以 在 没 有 脚 本 的 情 况 下 把 一 个 A c tiv e X 控 件 放 进 一 个 页 面 它 能 在 那 儿 挺 美 观 地 呆 着 但 也 仅 此 而 已 事 实 上 在 第
10 章 中 我 们 将 会 看 到 即 使 你 还 没 有 为 一 个 A c tiv e X 控 件 写 出 脚 本 它 也 可以 执 行 某 些 功 能 这 些 功 能 仅 限 于 使 用 V is u a l C + + 写 出 这 个 控 件 时 指 定 它 要完 成 的 事 换 言 之 控 件 在 没 有 脚 本 时 是 内 部 激 活 的 而 脚 本 却 可 以 让 它 与 外部 世 界 打 交 道
幸 运 的 是 除 了 使 用 A c tiv e X 控 件 需 要 脚 本 语 言 外 使 用 脚 本 语 言 还 有 一些 好 处 对 你 键 入 的 数 据 找 出 其 不 完 整 或 有 点 错 这 样 一 些 小 事 要 靠 CG I 脚本 在 主 机 In te rn e t 服 务 器 上 完 成 这 时 你 是 不 是 曾 经 坐 在 那 里 傻 等 ? 许多 人 都 曾 有 过 这 样 的 经 历 由 于 VB S c r ip t 和 J a va S c r ipt 都 是 在 主 机 这 时 是 用户 的 机 器 上 执 行 可 以 发 现 用 户 一 打 入 信 息 马 上 就 能 把 有 效 性 验 证 工 作完 成 这 节 约 了 网 络 带 宽 并 且 做 到 了 即 时 向 用 户 反 馈 任 何 使 用 户 高 兴 的 事也 要 受 限 于 节 约 你 一 些 时 间 这 件 事
注 使 用 脚 本 可 以 节 约 网 络 带 宽 而 且 可 以 使 页 面 上 的 ActiveX 控 件 与 外
部 世 界 打 交 道
显 然 如 果 你 打 算 要 花 些 时 间 使 用 脚 本 语 言 那 么 就 值 得 去 了 解 一 下 这 个舞 台 的 主 角 某 些 脚 本 语 言 比 另 一 些 要 更 流 行 一 些 现 在 VB S c r ip t 和 J a va S c r ipt 看 起 来 都 引 起 了 大 部 分 媒 体 的 注 意 Ja v a sc r ip t 的 M ic ros oft 版 本 称 为 JS c r ip t
我 在 全 书 中 都 使 用 J a va S c r ipt 表 示 任 何 形 式 的 脚 本 语 言 Ja v a S c r ip t 可 以 在In te rn e t E xp lore r 和 N e ts c a pe N a v iga to r 上 工 作 而 VB S c r ip t 只 能 在 In te rn e t E xp lo re r 上 工 作 用 于 N e ts c a p e N a v ig a to r 的 N C o m pa s s S c r ip tA c t ive 插 件 仅能 完 成 让 这 种 浏 览 器 支 持 VB S c r ip t 这 类 事 情 A c tiv e X C o n tro l P a d 目 前 支 持VB S c r ip t 和 J a va S c r ipt 可 以 发 现 市 场 上 可 以 见 到 的 大 部 分 其 它 工 具 也 支 持 它们
注 释 尽 管 你 可 能 要 选 择 VBScript 或 JavaScript 与 ActiveX 控 件 一 起 使用 但 本 章 将 集 中 讨 论 JavaScript 做 出 这 种 抉 择 的 理 由 有 三 第一 JavaScript 比 VBScript 在 语 法 上 更 接 近 Visual C++ 所 以 你的 学 习 曲 线 的 陡 峭 度 就 小 即 学 习 起 来 难 度 小 第 二 JavaScript 天 生 就 被 两 大 主 要 浏 览 器 Internet Explorer 和 Netscape Navigator 支 持 第 三 最 新 的 Microsof 的 出 版 物 及 商 业 杂 志 之 类 的 其 它 来 源已 经 在 说 明 VBScript 正 在 失 宠 而 JavaScript 却 受 到 喜 爱
我 们 再 看 一 下 A c tiv e X S c r ip tin g 它 是 一 种 O LE 通 信 技 术 而 不 是 脚 本 语言 一 旦 A c tiv e X S c r ip tin g 可 以 使 用 后 就 能 得 到 它 是 涉 及 到 什 么 技 术 的 概 要从 而 使 你 准 备 使 用 A c tiv e X S c r ip tin g 总 起 来 说 可 以 发 现 A c tiv e X S c r ip tin g 依赖 于 目 前 的 O LE 技 术 它 加 入 了 一 些 新 的 界 面 元 素 和 一 些 从 其 它 地 方 借 鉴 来
的 功 能 这 项 技 术 的 实 际 面 目 还 有 点 复 杂 无 疑 我 们 将 会 看 到 这 些 新 的 界 面元 素
技 巧 如 果 计 划 采 用 ActiveX 控 件 或 本 章 中 讨 论 的 任 一 种 脚 本 技 术 耗 费大 量 时 间 去 开 发 W e b 页 的 话 你 肯 定 需 要 得 到 一 种 比 ActiveX Control Pad 功 能 更 强 的 工 具 诸 如 Microsoft Visual InterDev 之 类 的 产 品 则 使 你 不 必 对 基 本 的 HTML 标 记 了 解 太 多 而 且 很 容 易 地 创 建 W e b 页Visual InterDev 还 使 你 可 以 在 Web 页 内 使 用 ActiveX 控 件 ActiveX Control Pa d 对 于 实 验 用 途 是 最 有 用 的 使 你 可 以 创 建 包 含 脚 本 的 小小 的 W e b 测 试 页 面
本 章 用 大 部 分 时 间 来 考 察 A c tiv e X 控 件 和 脚 本 怎 样 配 合 起 来 进 行 工 作 让我 们 从 一 个 简 单 例 子 开 始 这 个 例 子 使 用 了 A c tiv e X C o n tro l P a d 提 供 的 一 些 控件 例 如 也 许 你 已 经 注 意 到 我 们 不 能 通 过 把 下 拉 列 表 框 粘 贴 到 页 面 上 并 通过 访 问 属 性 对 话 框 来 定 义 下 拉 列 表 框 的 列 表 项 道 理 很 简 单 需 要 使 用 脚 本 在运 行 时 添 加 列 表 项 本 章 各 节 均 讨 论 J a va S c r ipt 但 是 也 可 以 使 用 VB S c r ip t 完 成 类 似 的 任 务
走 过 打 基 础 阶 段 后 我 们 将 用 些 时 间 讨 论 一 些 中 等 难 度 的 脚 本 例 子 例 如讨 论 一 下 怎 样 使 用 脚 本 与 已 建 立 的 控 件 打 交 道 虽 然 本 章 缺 少 一 个 实 际 上 更 复杂 的 控 件 来 演 示 深 入 的 概 念 但 我 们 依 然 研 究 了 足 够 多 的 基 本 概 念 说 明 了 如何 在 复 杂 情 况 下 使 用 脚 本 的 方 法
- 1 Ac ti ve X Scr ip ti ng 概 要
目 前 A c tiv e X S c r ip tin g 还 不 能 像 我 们 谈 论 过 的 VB S c r ip t 和 Ja v a S c r ip t 语 言那 样 成 为 一 种 语 言 宏 或 其 它 形 式 的 语 言 本 章 下 一 节 将 讨 论 J a va S c r ipt 语言 最 好 将 它 定 义 为 客 户 机 与 服 务 器 之 间 的 一 种 通 信 方 法 实 质 上 它 是M ic ros oft 为 OL E 自 动 化 起 的 新 名 称 说 OL E 自 动 化 与 A c tiv e X S c r ip tin g 完 全相 同 也 许 不 够 准 确 因 为 M ic ros oft 没 有 把 A c tiv e X S c r ip tin g 的 能 力 停 留 在 应 用级 别 上 大 多 数 M ic ros oft 产 品 和 诸 如 Co re l D R A W 之 类 的 一 些 其 它 产 品 在应 用 级 别 上 支 持 OL E 自 动 化 ! A c tiv e X S c r ip tin g 还 包 括 了 In te rn e t
可 移 植 性 问 题 本 书 前 面 的 例 子 中 MFC AppWizard 应 用 程 序 向 导 提 供了 O L E 自 动 化 复 选 框 这 一 点 也 许 你 已 注 意 到 这 一 复 选 框 像 诸 如CorelDRAW 之 类 的 产 品 一 样 向 你 的 应 用 程 序 添 加 相 同 种 类 的 脚 本 能力 换 言 之 可 以 在 本 地 的 机 器 或 网 络 中 使 用 脚 本 能 力 但 是 这 一能 力 仍 然 不 是 完 整 的 ActiveX Sc ripting 因 为 它 不 包 括 Internet 你 仍 然 需 要 手 工 地 向 Visual C++ 应 用 程 序 添 加 这 种 功 能 因 为 ActiveX Scripting 标 准 还 没 有 最 后 定 下 来 所 以 你 看 到 的 仍 然 是 进 展 中 的 东西
既 然 A c tiv e X S c r ip tin g 不 是 语 言 而 是 通 信 规 范 那 么 脚 本 语 言 包 括 语法 这 一 类 问 题 就 留 给 了 脚 本 供 货 商 来 提 供 这 一 标 准 的 目 的 在 于 定 义 一 种 方法 使 脚 本 主 机 可 以 调 用 各 种 脚 本 引 擎 并 且 用 于 OL E 容 器 中 对 象 间 的 通 信
从 实 质 上 看 脚 本 更 像 是 可 执 行 代 码 的 大 杂 烩 它 可 能 含 有 文 本 伪 代 码 甚至 还 有 原 始 二 进 制 格 式 的 可 执 行 代 码 A c tiv e X S c r ip tin g 的 实 质 是 它 是 基 于 OL E 的 可 用 于 应 用 程 序 和 In te rn e t 的 通 信 媒 介
WEB 链 接 写 作 本 书 时 ActiveX Scripting 说 明 书 仍 在 变 动 之 中 如 果打 算 用 ActiveX Sc ripting 作 为 其 它 技 术 的 替 代 或 补 充 也 许 要 用 些时 间 看 一 下 最 新 动 向 进 而 本 节 并 不 完 全 涵 盖 O L E 主 机 和 脚 本 引 擎需 要 的 所 有 接 口 方 法 的 调 用 语 法 欲 了 解 目 前 Act iveX Scripting 说 明 更 多 的 信 息 , 请 查 看 http:
//www.micr osoft.com/intdev/sdk /docs/olescrpt/ 要 查 找 有 关ActiveX S c r i p t i n g 主 机 的 信 息 下 列 两 个 站 点 不 错
http://www .microsoft.c om/ m s d n /
sdk/inetsd k/help/wsh/wobj_2.ht m 和h t t p : / / w w w . m i c r o s o f t . c o m / m s d n / sdk/
inetsdk/he lp/compdev/scripting /ho s t s . h t m 如 果 想 多 了 解 一 些 关于 建 立 一 个 Ac ti veX S cri pt ing 引 擎 的 需 求 请查 看
http://www .microsoft.com/msdn /sdk/inetsdk/help/co mpdev/eng ines/engin es.htm
让 我 们 花 点 时 间 定 义 几 个 术 语 首 先 精 确 地 说 什 么 是 脚 本 主 机 呢 ? 它是 支 持 脚 本 引 擎 的 一 种 应 用 程 序 定 义 脚 本 时 是 脚 本 主 机 接 受 这 个 脚 本 并 向引 擎 发 出 命 令 A c tiv e X S c r ip tin g 主 机 的 最 通 用 的 例 子 是 In te rn e t E xp lore r 3 .0 使 用 插 件 可 以 向 N e ts c a pe N a v iga to r 添 加 这 种 能 力 第 8 章 讨 论 过 一 种 插 件
— — N C o m p a s s S c r ip t A c tiv e 脚 本 引 擎 当 然 不 限 于 这 些 产 品 中 的 任 何 一 种你 可 以 在 一 个 定 制 的 浏 览 器 应 用 程 序 中 建 立 它 或 者 在 一 些 应 用 程 序 中 找 到 它
例 如 很 有 可 能 在 不 远 的 将 来 M ic ros oft 会 使 其 全 部 应 用 程 序 产 品 如 M ic ros oft W o rd 都 符 合 这 一 标 准
— 个 A c tiv e X 脚 本 引 擎 是 一 个 对 象 这 个 对 象 才 真 正 地 对 脚 本 进 行 解 释对 精 确 的 语 言 语 法 甚 至 脚 本 的 形 式 都 没 有 限 制 理 论 上 写 A c tiv e X 脚 本 可使 用 任 意 语 言 包 括 VB S c r ip t Ja v a 和 Ja v a S c r ip t 和 本 节 后 面 要 讨 论 的 任 何一 种 O LE 对 象 一 样 一 个 A c tiv e X 脚 本 引 擎 提 供 的 是 特 殊 接 口 另 外 可 以使 用 OL E 自 动 化 包 装 工 具 写 出 A c tiv e X 脚 本 引 擎 M ic ros oft 计 划 为 A c t iv e X Sc r ip t in g 提 供 一 种 特 殊 形 式 的 OL E 自 动 化 包 装 器 使 用 包 装 器 格 式 的 好 处 是它 保 持 了 代 码 的 短 小 精 炼 ─ ─ 这 对 于 浏 览 器 和 在 线 脚 本 引 擎 都 是 理 想 选 择 不利 之 处 是 如 果 直 接 写 出 A c tiv e X S c r ip t in g 接 口 你 将 失 去 对 运 行 时 你 可 以 有的 名 字 空 间 持 久 模 型 以 及 其 它 著 作 元 素 的 控 制
A c tiv e X S c r ip ting 要 求 有 四 种 新 的 接 口 元 素 可 选 项 IA c tiv e S c rip t S ite 和 可选 项 IA c tiv e S c r ip t S ite W indow s 接 口 为 主 机 专 用 而 IA ctiv eS crip t 和 可 选 项IA ctiv eS crip t P ars e 接 口 则 为 脚 本 引 擎 专 用 若 不 实 现 IA ctiv eS crip t P ars e 则 需 要实 现 某 种 形 式 的 IP e rsist 接 口 每 个 接 口 元 素 执 行 下 面 列 出 的 一 种 具 体 功 能
IactiveScr iptSite 这 个 接 口 的 主 要 目 的 是 为 A c tiv e X S c r ip ting 引 擎 创 建一 个 站 点 这 与 其 它 的 OL E 实 现 中 的 容 器 的 概 念 (id e a ) 相 对 应 ─ ─ 容 器 容 纳的 是 诸 如 A c tiv e X 控 件 之 类 的 东 西 因 为 这 是 一 个 容 器 接 口 所 以 它 监 测脚 本 的 开 始 终 止 及 脚 本 出 错 等 等 一 类 的 事 件
IactiveScr iptSiteWindow 任 一 个 提 供 用 户 接 口 的 A c tiv e X S c r ip tin g 主 机
也 需 要 提 供 本 接 口 服 务 器 不 一 定 应 用 它 实 际 上 如 果 需 要 用 于 脚 本目 的 的 窗 口 则 也 需 要 实 现 这 一 接 口 IA c tiv e S c r ip t S ite W indow 提 供 了 两种 主 要 方 法 尽 管 可 以 提 供 其 它 所 需 的 方 法 G e t W indow ( ) 用 于 创 建 窗 口E n a b le M o d e le s s ( ) 则 设 置 窗 口 的 模 式 ( m oda l) 条 件 G e t W indow ( ) 的 功 能 类 似于 OL E 自 动 化 专 用 的 IO le W indow :: G e t W indow ( ) 函 数 而 E n a b le M o d e le s s ( ) 的 功 能 则 类 似 于 IO le In P la c e F ra m e :: E n a b le M o d e le s s () 函 数
IactiveScr ipt 这 一 接 口 使 你 与 脚 本 本 身 一 起 工 作 用 它 可 得 到 脚 本 的 站点 启 动 和 终 止 脚 本 使 用 脚 本 项 目 关 闭 脚 本 或 者 建 立 线 程 状 态 与 参数
IactiveScr iptParse 这 一 接 口 从 脚 本 主 机 接 受 脚 本 它 使 你 能 创 建 一 个 新脚 本 向 一 个 现 存 脚 本 中 添 加 原 始 脚 本 片 段 或 对 一 个 现 存 脚 本 进 行 分 析
V is u a l C + + 提 供 了 一 个 方 便 的 实 用 程 序 称 为 OL E / C O M O b je c t V ie w e r O LE / C O M 对 象 浏 览 器 使 用 它 可 以 更 详 细 地 看 到 这 些 接 口 M ic ros oft 在
其 V is u a l C + + 的 最 新 版 本 中 将 名 称 缩 写 为 O LE V ie w OL E 浏 览 器 本 书中 我 们 将 多 次 用 到 这 个 实 用 程 序 如 果 你 还 没 有 安 装 的 话 应 该 安 装 上 它 让我 们 先 看 一 看 A c tiv e X S c r ip tin g is s u e 的 主 机 端 和 以 前 提 到 的 一 样 V is u a l C + +仍 然 提 供 一 个 OL E 自 动 化 接 口 这 个 接 口 不 提 供 与 In te rn e t 连 接 的 功 能 接 着请 打 开 O L E / C O M O b ject V iew er 就 会 看 到 一 叠 文 件 夹 打 开 D o c u m e n t O b je c ts文 档 对 象 文 件 夹 再 打 开 XYZ S in g le D o c u m e n t 文 件 夹 就 会 看 到 接 口 列
表 与 图 9 .1 类 似 这 些 接 口 是 M F C 实 现 的 建 立 应 用 程 序 时 可 使 用 它 们
图 9 .1 在 OL E V ie w 中查 看 A c t iv e X 接口
请 注 意 在 左 边 的 窗 格 中 的 IO le W indow 接 口 已 被 选 中 看 一 下 右 边 的 窗 格可 以 看 到 这 个 接 口 提 供 五 种 方 法 进 一 步 研 究 表 明 这 些 方 法 之 一 是 G e t W ind ow ( ) 前 面 提 到 过 没 有 IA c tiv e S c r ip t S ite W indow 接 口 而 IO le W indow 接 口 却 存 在 这 意 味 着 你 的 应 用 程 序 支 持 OL E 自 动 化 而 不 支 持 A c t iv e X Sc r ip t in g 现 在 如 果 你 看 一 下 这 个 列 表 中 的 每 个 其 它 应 用 程 序 如 果 有 的话 包 括 O ffic e 9 7 就 会 发 现 没 有 一 个 应 用 程 序 是 支 持 A c tiv e X S c r ip tin g 的
警 告 如 果 在 OLE/COM Object Viewer 中 创 建 了 应 用 程 序 或 控 件 的 实 例而 后 没 有 不 释 放 相 应 实 例 那 么 就 会 发 生 奇 怪 的 事 情 例 如 你 的 机器 会 意 外 地 死 机 ! 每 当 你 查 看 一 个 应 用 程 序 或 控 件 支 持 的 接 口 时 就不 得 不 创 建 一 个 实 例 来 完 成 这 个 操 作 通 过 查 看 应 用 程 序 的 名 称 也能 够 知 道 是 否 存 在 一 个 对 象 的 实 例 OLE/COM Ob ject View er 用 粗 体显 示 打 开 的 对 象 为 了 释 放 你 创 建 的 实 例 用 右 键 单 击 对 象 名 比 如是 XYZ Single Document 然 后 在 上 下 文 相 关 菜 单 中 选 择 Release Instance 释 放 实 例 即 可 完 成 幸 运 的 是 OLE/COM Object Viewer 在 你 离 开 该 工 具 时 总 是 会 关 闭 对 象 的 实 例 但 是 如 果 在 查 看 会 话 期 间机 器 的 内 存 开 始 不 够 用 时 就 应 该 关 闭 对 象 的 实 例 应 该 记 住 每 创建 一 个 实 例 就 要 占 用 一 些 内 存
客 户 端 对 A c tiv e X S c r ip tin g 也 是 支 持 的 至 少 在 一 种 初 步 形 式 上 是 这 样 释放 XYZ S in g le D o c u m e n t 的 实 例 然 后 关 闭 D o c u m e n t O b je c t 文 件 夹 接 着 打开 A c tiv e X S c r ip tin g E n g in e 文 件 夹 可 以 看 到 两 个 项 一 个 是 J a va S c r ipt 另 一个 是 VB S c r ip t 这 两 个 项 都 是 In te rn e t E x p lo re r 支 持 的 但 我 们 期 望 看 到 N e ts cap e
N a v iga to r 也 支 持 它 们 打 开 J S c r ip t L a ngua ge ( J a v a S c r ip t) 项 可 以 看 到 如 图 9 .2
所 示 的 典 型 的 接 口 列 表 你 的 列 表 也 许 会 稍 有 不 同
图 9 .2 在 OL E 视图 中查 看 Ja v a S c r ip t
请 留 意 被 选 中 的 项 IA ctiv eS crip t 它 是 我 前 面 描 述 过 的 第 一 个 客 户 机 端 接口 在 它 下 面 可 以 看 到 Ia c tiv e S c rip t- P a rs e 项 它 是 我 前 面 描 述 的 第 二 个 客 户机 端 接 口 这 两 个 元 素 的 存 在 意 味 着 In te rn e t E x p lo re r 当 前 把 A c t iv e X S c r ip t in g 做 为 一 个 客 户 机 来 支 持 它 但 是 在 O L E / C O M O b je ct V iew er 的 这 一 部 分 中 却连 一 个 相 联 系 的 服 务 器 项 都 找 不 到
让 我 们 对 于 A c tiv e X S c r ip tin g 的 主 机 与 客 户 机 的 关 系 再 多 说 几 句 一 个A c tiv e X S c r ip tin g 会 话 期 要 涉 及 到 三 个 不 同 的 元 素 主 机 引 擎 以 及 包 含 代 码和 控 件 的 窗 口 页 在 这 三 个 元 素 之 间 建 立 通 信 的 过 程 有 8 个 步 骤
-
主
机 根 据 需 要 装 入 文 档 或 工 程 这 不 是 A c tiv e X S c r ip tin g 专 用 任 务 因 为 任意 环 境 都 需 要 执 行 这 一 步
-
主
机 创 建 一 个 脚 本 引 擎 通 常 它 要 使 用 <O B J E C T > 标 记 中 的 PR O G ID 属 性并 通 过 调 用 C o C rea t In s ta n ce() 来 完 成 这 个 任 务
-
然
后 装 入 脚 本 主 机 完 成 这 件 事 的 方 式 有 几 种 如 果 脚 本 存 贮 为 驻 留 ( P e rsiste d ) 数 据 那 么 主 机 就 使 用 引 擎 的 IP ers is t:: L o ad ( ) 把 它 再 次 装 入 内 存 如 果 主 机 需要 装 入 一 个 新 脚 本 那 么 它 就 调 用 IA c tiv e S c rip tP a rs e ::In itN e w ( ) 或 者IP e rs is t:: In itN e w ( ) 创 建 一 个 空 脚 本 把 脚 本 当 成 文 本 来 维 护 的 主 机 然 后 调 用IA ctiv eS crip t P ars e :: P a rs e S c r ip t T e x t( ) 把 脚 本 装 入 引 擎 使 用 其 它 格 式 维 护 脚 本 的主 机 则 不 得 不 设 计 自 己 的 装 入 方 法
-
主
机 把 脚 本 装 入 后 必 须 用 实 体 填 入 引 擎 的 名 字 空 间 实 体 可 以 是 窗 体 页或 其 它 文 档 主 机 使 用 IA c tiv e S c rip t::A d d N a m e I te m ( ) 方 法 完 成 这 一 任 务 显 然它 不 必 装 入 存 贮 为 脚 本 驻 留 内 存 一 部 分 的 那 些 实 体 低 级 项 比 如 A c tiv e X 控件 需 要 不 同 的 装 入 技 术 主 机 使 用 IT y p e In fo 和 ID is p a tc h 接 口 来 完 成 这 项 工作
-
现
在 A c tiv e X 脚 本 引 擎 已 取 得 了 它 需 要 运 行 脚 本 所 需 的 一 切 主 机 发 出 一个 IA c tiv e S c rip t::S e t S c r ip t S ta te ( S C R IP T S T A T E _ C O N N E C T E D ) 调 用 这 就 是 让 脚本 引 擎 启 动 脚 本 它 相 当 于 标 准 C 程 序 中 调 用 M a in ( ) 函 数
-
在
脚 本 引 擎 真 正 开 始 运 行 脚 本 之 前 它 还 要 先 干 几 件 家 务 活 例 如 需 要 为每 个 顶 级 项 联 系 上 一 个 符 号 脚 本 引 擎 干 这 件 事 时 使 用 的 是IA c tiv e S c rip tS ite ::G e t I te m In fo ( ) 方 法
-
脚
本 引 擎 真 正 运 行 脚 本 之 前 的 最 后 一 个 步 骤 是 在 脚 本 元 素 与 与 对 象 相 关 联的 事 件 之 间 建 立 适 当 连 接 例 如 如 果 存 在 一 个 脚 本 项 它 处 理 一 个 按 钮 的onC lic k 单 击 事 件 那 么 脚 本 引 擎 就 需 要 在 运 行 脚 本 之 前 建 立 这 个 连 接脚 本 引 擎 使 用 IC onne c tionP o in t 接 口 完 成 这 一 工 作
-
最
后 脚 本 引 擎 开 始 运 行 脚 本 运 行 脚 本 时 脚 本 引 擎 需 要 访 问 与 HT M L 页上 或 其 它 文 档 中 的 对 象 相 关 联 的 方 法 和 属 性 它 使 用 ID is pa tc h :: Invok e ( ) 或 其 它标 准 的 OL E 捆 绑 方 法 来 干 这 件 事
现 在 你 对 脚 本 如 何 工 作 这 一 点 已 有 了 相 当 好 的 理 解 让 我 们 快 速 地 看 一下 脚 本 引 擎 运 行 时 作 出 反 应 的 几 种 方 式 脚 本 引 擎 不 只 是 具 有 简 单 的 两 种 操作 状 态 ON /OF F 实 际 上 它 具 有 好 几 种 状 态 使 用 这 些 状 态 可 以 确 定 需 要 干些 什 么 才 能 使 它 运 行 使 用 IA c tiv e S c rip t::G e t S c r ip t S ta te ( ) 方 法 可 以 得 到 当 前状 态 以 下 列 表 列 出 了 脚 本 引 擎 的 各 种 状 态
-
Uninitiali
zed 未 初 始 化 这 表 明 脚 本 引 擎 还 没 有 准 备 好 通 常 主 机在 脚 本 引 擎 离 开 这 一 状 态 前 要 装 入 运 行 脚 本 所 需 的 脚 本 和 实 体
-
Initialize
d 已 初 始 化 脚 本 已 装 入 通 常 用 IP e rsist 运 行 站 点 已设 定 使 用 IA ctiv eS crip t S ite 但 脚 本 引 擎 还 没 有 真 正 地 与 一 个 主 机 相 联系 脚 本 引 擎 处 于 这 种 状 态 时 不 能 运 行 任 何 代 码 一 旦 脚 本 引 擎 进 入 已启 动 状 态 则 由 IA ctiv eS crip t P ars e :: P ars e S c r ip t T e x t( ) 执 行 的 代 码 将 开 始 运 行
-
Started
已 启 动 这 是 一 种 过 渡 状 态 从 这 种 状 态 使 用 ID is p a tc h 就 能运 行 代 码 了 所 有 代 码 与 对 象 一 起 装 入 但 是 脚 本 引 擎 尚 未 在 脚 本 元 素与 对 象 事 件 之 间 建 立 连 接 如 果 脚 本 运 行 到 需 要 执 行 事 件 处 理 的 地 方 它就 被 阻 塞 停 止 直 至 脚 本 引 擎 完 成 所 需 的 初 始 化
-
Connected
已 连 接 脚 本 引 擎 做 好 了 去 执 行 需 要 由 它 来 执 行 的 每 项 任 务的 准 备 时 就 是 进 入 了 这 种 状 态
-
Disconnect
ed 连 接 暂 停 脚 本 引 擎 进 入 这 一 状 态 后 实 际 上 脚 本 已 暂停 脚 本 仍 处 于 装 入 状 态 所 有 连 接 依 然 存 在 但 脚 本 引 擎 却 不 准 备 回 答主 机 的 请 求 脚 本 引 擎 可 以 在 不 丢 失 脚 本 当 前 运 行 位 置 的 情 况 下 离 开 这 一状态并返回 已连接状态
-
Closed
关 闭 在 这 种 状 态 中 的 脚 本 引 擎 不 再 回 答 调 用 你 发 出
IA c tiv e S c rip t::C lo s e ( ) 调 用 后 就 进 入 这 一 状 态
2 Ja va S c r ipt in g 基 础 知 识
在 深 入 讨 论 之 前 我 们 先 澄 清 一 件 事 Ja v a 和 J a va S c r ipt 是 两 种 完 全 不 同 的实 体 如 果 你 看 到 的 是 一 种 功 能 强 大 的 编 程 环 境 那 么 你 看 到 的 语 言 是 Ja v a ( 或M ic to s o f t 版 的 Ja v a 称 为 J+ + ) 而 不 是 J a va S c r ipt 反 之 如 果 你 看 到 的 是 与VB S c r ip t 一 样 外 型 的 宏 语 言 尽 管 功 能 不 同 而 且 是 面 向 C 的 那 么 这 是 J a va S c r ipt 另 外 Ja v a 是 Su n 公 司 的 发 明 而 Ja v a S c r ip t 却 是 由 N e ts c a p e 的 杰作 肯 定 是 N e ts c a p e 的 市 场 人 员 造 成 了 这 种 容 易 混 淆 的 概 念 ─ ─ 对 两 种 产 品 赋
予 了 相 同 的 名 称 J a va S c r ipt 原 来 的 名 称 是 L iv e S c r ip t
可 移 植 性 JavaScript 一 直 是 浏 览 器 大 战 中 的 受 害 者 之 一 Internet Explorer 和 Netscape N avigator 在 各 自 浏 览 器 中 使 用 类 似 的 但 又不 完 全 兼 容 的 JavaScript 版 本 有 一 个 小 故 事 说 Netscape 为 它 的JavaScript 版 本 推 出 公 开 说 明 书 时 慢 了 一 步 而 Microsoft 就 抓 住时 机 设 计 了 自 己 JavaScript 版 本 有 传 言 说 两 个 公 司 正 在 制 定JavaScript 标 准 的 联 合 版 本 ─ ─ 对 于 这 一 点 我 不 会 屏 住 呼 吸 等 待它 同 时 使 用 JavaScript 时 你 不 得 不 面 对 兼 容 性 问 题 好 消 息是 通 过 努 力 可 以 做 出 能 在 两 个 浏 览 器 上 都 行 得 通 的 你 自 己 的 一 个脚 本 版 本 当 然 你 肯 定 需 要 在 两 种 产 品 中 测 试 你 的 脚 本 从 而 确 保他 们 像 所 预 期 地 那 样 工 作 起 来
现 在 我 们 已 把 Ja v a 和 J a va S c r ipt 区 分 清 楚 了 我 们 来 看 一 下 语 言 本 身 可以 发 现 J a va S c r ipt 在 相 当 程 度 上 与 VB S c r ip t 一 样 都 是 用 于 相 同 的 目 的 ─ ─ 作 为 在 一 个 HT M L 页 上 用 A c tiv e X 控 件 和 J a va a pp le t 工 作 的 一 种 手 段 事 实 上使 用 J a va S c r ipt 可 以 处 理 任 意 对 象 唯 一 的 制 约 因 素 是 弄 清 楚 该 怎 样 去 做 对于 我 们 在 本 章 后 面 几 节 中 要 看 到 的 许 多 其 它 目 的 的 大 部 分 J a va S c r ipt 迟 早 会 有用 J a va S c r ipt 提 供 了 一 套 与 VB S c r ip t 截 然 不 同 的 特 色 这 些 特 色 能 增 强 W e b 站 点 的 表 达 能 力 弄 明 白 这 一 点 才 是 重 要 的
注 除 了 名 称 相 似 外 JavaScript 和 Java 实 际 上 是 两 种 截 然 不 同 的 编 程 环境
与 VB S c r ip t 不 同 对 于 J a va S c r ipt 来 说 不 存 在 任 何 与 它 直 接 兼 容 的 版 本
把 它 与 C ( 或 Ja v a ) 相 比 不 会 使 你 得 到 更 多 的 信 息 因 为 J a va S c r ipt 设 计 为 面 向In te rn e t 使 用 的 具 有 一 套 独 立 特 色 的 产 品 使 J a va S c r ipt 在 In te rn e t 出 名 的 主 要是 它 的 兼 容 性 肯 定 地 是 不 能 把 J a va S c r ipt 应 用 程 序 搬 到 C 编 译 器 去 进 行 编译 并 期 望 它 做 事 但 是 你 能 指 望 它 比 VB S c r ip t 能 在 更 多 的 原 始 浏 览 器 环 境下 工 作 本 节 中 我 们 快 速 地 浏 览 一 下 J a va S c r ipt 提 供 了 些 什 么 然 后 在 本 章 中我 们 可 以 看 到 它 是 如 何 工 作 的
可 移 植 性 请 记 住 JavaScript 使 用 与 C 类 似 的 语 法 这 意 味 着 在 有 些情 况 下 JavaScript 看 起 来 有 点 像 C 而 在 其 它 方 面 JavaScript 将 使 用 通 常 不 能 在 C 中 使 用 的 新 结 构 当 你 在 JavaScript 环 境 中 能 从 C 应 用 程 序 中 使 用 一 些 应 用 程 序 逻 辑 时 不 要 以 为 不 做 任 何 的 修改 就 能 这 样 做 JavaScript 毕 竟 与 Visual C++ 不 直 接 兼 容
J a va S c r ipt 处 理 HT M L 文 档 时 采 用 了 对 象 映 射 法 ( a pproa c h ) 它 建 立 了 对象 的 一 种 层 次 结 构 从 窗 口 开 始 文 档 在 窗 口 中 窗 体 在 文 档 中 最 后 对 象在 窗 体 中 使 用 J a va S c r ipt 可 以 通 过 定 义 路 径 的 方 法 与 每 个 对 象 通 信 例 如如 果 想 对 某 个 窗 体 做 点 事 你 要 从 窗 口 名 中 分 离 出 窗 体 名 W ind ow 1 .F o rm 1 注 意 窗 口 名 与 窗 体 名 用 一 个 圆 点 分 开 许 多 程 序 员 把 这 叫 做 点 语 法 引 用
J a va S c r ipt 存 在 一 些 与 C 完 全 不 同 的 内 容 首 先 J a va S c r ipt 是 一 种 松 散 型语 言 这 意 味 着 不 一 定 要 对 变 量 进 行 说 明 其 次 J a va S c r ipt 中 存 在 对 象 但 不存 在 类 或 继 承 这 意 味 着 不 能 创 建 新 的 对 象 类 型 但 是 能 够 把 一 个 现 有 对 象类 型 扩 充 到 某 种 程 度 你 使 用 的 对 象 就 是 HT M L 文 档 或 窗 体 中 包 含 的 那 些 对象 例 如 甚 至 是 基 本 的 J a va S c r ipt 应 用 程 序 也 能 够 访 问 W in dow 对 象 ─ ─ 每 个
HT M L 文 档 必 须 有 这 样 的 对 象 在 W ind ow 对 象 中 可 以 找 到 缺 省 对 象 如 文档 框 架 历 史 位 置 等 等
还 可 以 扩 充 对 象 的 数 目 供 你 使 用 但 不 要 用 创 建 新 类 的 通 常 方 法 本 章 中讨 论 的 方 法 是 使 用 A c tiv e X 控 件 使 用 A c tiv e X 控 件 的 扩 充 方 法 依 赖 于 控 件作 者 让 你 使 用 什 么 样 的 属 性 与 方 法 从 实 质 上 看 一 个 A c tiv e X 控 件 属 性 出现 于 属 性 页 中 方 法 就 是 暴 露 出 来 的 事 件 若 要 对 建 立 控 件 方 面 了 解 更 多 的信 息 请 看 第 10 章 中 例 子 重 要 的 是 要 记 住 J a va S c r ipt 是 基 于 对 象 的 而 不是 面 向 对 象 的 最 后 J a va S c r ipt 是 动 态 约 束 ( bound) 的 这 意 味 着 它 在 运 行 时 才核 查 对 象 C 和 Ja v a 则 都 是 静 态 约 束 的 他 们 都 是 在 编 译 时 核 查 对 象
WEB 链 接 有许多 站点可以学 习 J a v a S c r i p t 首先 是找一份语 言指南 语言 指南 最 好 到http://hom e.netscape.com/eng/m ozilla/Gold/handbook /javascrip t/index.ht ml 去 找 可 以 发 现 在 那 里 不 仅 有 语 言 指 南 而 且 还 有对 各 种 语 言 元 素 的 极 好 讨 论 幸 好 你 可 以 从http://www .jchelp.com/javahelp /javahelp.htm 得 到 一 份 具 有Windows 帮 助 格 式 的 JavaScript 文 档 的 教 学 版
关 于 J a va S c r ipt 要 记 住 的 最 最 重 要 的 事 情 是 和 Ja v a 一 样 你 在 操 作 系 统硬 件 方 面 受 到 严 格 的 限 制 其 原 因 是 尽 可 能 多 的 防 止 出 现 安 全 缺 口 不 幸的 是 实 际 能 从 J a va S c r ipt 得 到 的 保 护 层 次 是 有 限 的 参 见 本 节 末 尾 高 级 技 巧三 个 普 通 的 J a va S c r ipt 安 全 缺 陷 中 的 详 细 讨 论 一 些 人 把 这 些 限 制 真 当
成 了 一 回 事 来 对 待 但 是 你 能 够 使 用 A c tiv e X 控 件 绕 开 这 些 限 制 中 的 大 部 分
因 为 用 户 在 下 载 前 不 得 不 请 求 A c tiv e X 控 件 所 以 安 全 性 得 到 了 加 强 A c tiv e X 控 件 要 求 一 定 要 签 名 也 有 助 于 改 善 安 全 性 但 不 论 你 使 用 何 种 策 略 确 实 想毁 坏 你 机 器 的 人 总 有 办 法 去 达 到 他 们 的 目 的
遇 到 的 硬 件 访 问 限 制 之 一 是 不 能 写 文 件 这 一 规 则 的 唯 一 例 外 是 能 够 向c ook ie 中 写 数 据 c ook ie 是 保 存 在 浏 览 器 缓 冲 区 目 录 下 的 一 部 分 数 据 c ook ie 的 目 的 是 从 一 个 会 话 转 向 下 一 个 会 话 时 存 贮 配 置 信 息 一 些 程 序 员 也 把 c ook ie 用 作 其 它 的 小 型 存 贮 目 的 例 如 可 以 用 它 来 存 贮 用 户 到 达 的 最 后 一 个 站 点 的UR L 以 便 于 在 下 一 会 话 中 让 用 户 再 返 回 到 那 个 站 点
J a va S c r ipt 支 持 四 种 不 同 的 变 量 类 型 数 字 字 符 串 布 尔 值 和 一 个 特 殊 的nu ll 空 值 可 以 使 用 函 数 调 用 将 一 种 变 量 类 型 转 换 成 另 一 种 但 是 你 能 够很 容 易 地 混 合 使 用 变 量 类 型 例 如 可 以 创 建 一 个 名 为 n AN u m b e r 给 它 赋 一个 数 值 的 值 就 在 代 码 的 下 一 行 你 就 能 够 赋 给 这 个 变 量 一 个 串 值 J a va S c r ipt 对 此 不 会 抱 怨 还 能 够 在 同 一 行 代 码 中 混 合 使 用 变 量 类 型 例 如
nA N u m b e r= " S o m e A n s w e r E qua ls " + 42 在 J a va S c r ipt 中 是 完 全 合 法 的 这 一 点 是下 列 做 法 的 理 由 之 一 通 过 使 用 引 言 中 解 释 过 的 匈 牙 利 表 示 法 强 制 使 用 你输 入 的 某 种 变 量
WEB 链 接 与 在 其 它 领 域 中 进 行 程 序 设 计 一 样 从 JavaScript 程 序 员 伙 伴那 里 取 得 反 馈 信 息 是 相 当 重 要 的 如 果 想 得 到 关 于 JavaScript 程 序设 计 技 术 相 当 公 正 的 观 点 Comp.Lang. JavaScript 是 最 好 的 地 方 之一 如 果 要 知 道 Microsoft 的 看 法 那 么 就 看 一 下microsoft. public.frontpage.cli ent 或 者 microsoft. public.
activex. p rogramming.scripting .jscript 其 它 的 Microsoft 新闻 组 偶 尔 也 有 JavaScript 方 面 的 消 息 但 从 这 两 个 新 闻 组 可 以 得 出大 部 分 消 息 comp.i nfosystems.www.autho ring.html 偶 尔 也 会提 到 JavaScript
在 J a va S c r ipt 中 函 数 是 使 用 模 块 化 编 码 的 唯 一 形 式 事 实 上 这 也 是J a va S c r ipt 实 际 使 用 类 似 C 的 外 观 的 第 一 点 和 大 多 数 程 序 设 计 语 言 一 样 函 数调 用 接 受 参 数 也 可 以 有 返 回 值 下 面 的 例 子 是 一 个 典 型 的 J a va S c r ipt 函 数请 注 意 它 调 用 了 D o c u m e n t.W r ite ( ) 这 个 函 数 是 脚 本 开 始 时 用 得 最 多 的 方 法 之一 使 用 它 不 仅 可 以 显 示 文 本 而 且 如 同 我 们 这 里 所 做 的 一 样 也 可 以 写 出 HT M L 代 码
fu n c t ion M y F unc t io n ( nS o m e V a lue )
{
D o cu m e n t .W r i te (" T h e v a lu e re ceiv e d w a s : " ,n S o m eV alue ," ." ," < B R > " ) R e tu rn nS om e V a lu e + 1
}
大 多 语 言 都 支 持 某 种 条 件 语 句 J a va S c r ipt 也 不 例 外 它 使 用 的 最 简 单 的 条件 形 式 是 (< 条 件 > )? < 值 1> :< 值 2> 使 用 它 把 两 个 值 中 的 一 个 赋 给 变 量 例 如 , l IS G reater= ( 值 1> 值 2 )? tru e : fa ls e 如 果 值 1 大 于 值 2 那 么 l Is G reater 就 等 于TR U E 还 可 以 像 下 面 例 子 那 样 使 用 I f ......E ls e 条 件 语 句 Ja v a S c r ip t 目 前 不 支 持C a s e ( s w itc h ) 语 句 这 样 当 核 查 许 多 不 同 值 时 写 出 其 代 码 就 要 困 难 一 些
if ( V a lue 1> V a lu e 2 )
{
}
els e
{
}
D o cu m e n t .W r i te (" V a lu e 1 is g reater th an V a lu e 2 ." ) R e tu rn tru e
D o cu m e n t .W r i te (" V a lu e 2 is g reater th an V a lu e 1 ." ) R e tu rn fa ls e
循 环 语 句 是 所 有 程 序 设 计 语 言 都 支 持 的 另 一 种 操 作 可 以 发 现 J a va S c r ipt 支持 两 种 不 同 的 循 环 结 构 fo r 和 w h ile 下 面 对 每 一 种 循 环 形 式 都 给 出 一 个 例 子请 注 意 他 们 看 起 来 几 乎 和 C 中 的 等 价 结 构 一 模 一 样
fo r ( n C o un te r = 0, nC o u n te r < 10 ,n C o un te r+ + )
{
D ouc um e n t .W r i te ( n C o un te r)
}
w h i le ( n C o un te r < 10)
{
D o c u m e n t .W rite (n C o u n te r)
nC oun te r+ +
}
以 上 给 出 了 J a va S c r ipt 最 基 本 的 概 貌 本 章 中 会 看 到 大 量 的 J a va S c r ipt 代 码所 以 不 用 担 心 你 还 有 很 多 东 西 没 弄 明 白 需 要 记 住 的 主 要 事 情 是 J a va S c r ipt 很像 C 但 无 论 你 怎 样 富 于 想 象 它 都 不 是 C 现 在 你 该 已 注 意 到 相 当 多 的 区 别了
• 欺 骗 用 户 上 载 (upload)文 件 尽 管 JavaScript 不 得 不 请 求 得 到 用户 的 允 许 来 上 载 一 个 文 件 但 黑 客 可 以 用 各 种 方 式 隐 藏 这 一 请 求黑 客 真 正 需 要 的 全 部 东 西 只 不 过 是 具 有 令 人 感 兴 趣 的 标 题 的 按钮 像 Windows95 使 用 的 那 种 上 载 口 令 字 文 件 是 很 容 易 被 破 译的 ─ ─ 这 使 得 黑 客 很 轻 易 地 就 能 闯 入 你 的 系 统
• 获 取 文 件 目 录 JavaScript 应 用 程 序 不 必 请 求 得 到 任 何 人 的 允 许就 能 加 载 你 机 器 中 的 目 录 事 实 上 它 还 能 加 载 你 访 问 过 的 任 意网 络 机 器 的 目 录 一 个 知 道 你 的 硬 盘 组 织 方 式 的 黑 客 闯 入 你 机器 时 就 要 容 易 得 多 了
• 追 踪 访 问 过 的 站 点 黑 客 们 通 过 追 踪 你 访 问 过 的 站 点 可 以 对 你了 解 很 多 JavaScript 应 用 程 序 使 得 追 踪 很 容 易 实 现 它 能 追 踪你 访 问 的 每 个 URL 并 把 地 址 发 向 黑 客 的 机 器 和 文 件 上 载 问 题 一样 用 户 不 得 不 指 出 是 否 允 许 追 踪 但 黑 客 能 够 把 这 一 允 许 伪 装成 其 它 东 西
- 3 使 用 独 立 的 脚 本
如 果 你 熟 悉 C 语 言 那 么 J a va S c r ipt 是 相 当 简 单 的 由 于 在 本 章 上 节 中 已初 步 介 绍 过 J a va S c r ipt 语 法 所 以 现 在 让 我 们 考 察 一 个 脚 本 样 本 这 是 J a va S c r ipt 的 一 个 典 型 应 用 程 序 用 于 计 算 定 货 单 上 用 户 项 的 结 果 使 得 服 务 器 不 必 在
In te rn e t 上 来 来 往 往 的 传 送 数 据
WEB 链 接 写 作 本 书 时 Microsoft 还 没 有 在 其 任 一 个 程 序 设 计 产 品 中 包括 ActiveX Control Pad 这 个 实 用 程 序 可 以 从 几 个 地 方 得 到 这 个实 用 程 序 可 以 由 你 的 MSDN (Wicr osoft 开 发 者 网 络 ) 预 订 处 向 你 供应 这 个 实 用 程 序 还 可 以 从 http://www . microsoft. com/workshop/author/ cpad/ 下 载 这 个 实 用 程 序 还 要 确信 你 能 找 到 Site Builde r Workshop 工 具 库 中 的 其 它 工 具 在 http:
//www. micros oft. com/workshop/defau lt.asp 能 找 到 关 于 这 个 工具 的 全 部 细 节 在 学 习 本 章 中 其 它 例 子 时 最 好 先 得 到 这 个 实 用 程 序因 为 这 些 例 子 都 假 定 你 拥 有 ActiveX Co ntrol Pad 从 第 8 章 开 始我 们 就 讨 论 了 这 个 实 用 程 序 如 果 你 没 读 第 8 章 中 ActiveX 放 在 什么 地 方 这 一 节 的 话 现 在 去 读 一 下 吧
程 序 列 表 9 .1 是 一 个 相 当 简 单 的 J a va S c r ipt 与 HT M L 有 关 联 的 脚 本 用于 显 示 一 份 订 货 单 并 自 动 计 算 用 户 应 付 费 用 的 总 额 仔 细 看 一 下 程 序 列 表有 一 两 个 标 记 以 前 还 没 见 过 以 及 一 些 虽 然 你 已 经 见 过 但 现 在 才 第 一 次 使 用的 标 记 图 9 .3 则 显 示 了 这 张 订 货 单 请 注 意 表 格 这 时 是 全 部 都 能 够 看 到 的这 个 特 定 的 窗 体 也 不 包 括 S ubm i t 提 交 按 钮 本 例 的 重 要 信 息 是 如 何 在 本 地处 理 窗 体 中 包 含 的 数 据
程 序 列 表 9 . 1
<H T M L >
<H E A D >
< T IT L E > T y p ic a l E n tr y F o rm < / T ITLE>
< S C R IP T L ANGUA GE = " J a v a S c r ip t" >
<!--
fu n c t ion C a lc u la te I te m 1 ( n A m ou n t)
{
w ind ow .d o c um e n t .D a ta E n try .I te m 1E x .va lu e = nA m o u n t * w in d o w .d o c um e n t .
D a ta E n try .I te m 1 .v a lu e C a lc u lateT o tals ( )
}
fu n c t ion C a lc u la te I te m 2 ( n A m ou n t)
{
w ind ow .d o c um e n t .D a ta E n try .I te m 2E x .va lu e = nA m o u n t * w in d o w . D o c u m e n t.
D a ta E n try .I te m 2 .v a lu e C a lc u lateT o tals ()
}
fu n c t ion C a lc u la te I te m 3 ( n A m ou n t)
{
w ind ow .d o c um e n t .D a ta E n try .I te m 3E x .va lu e = nA m o u n t * w in d o w .d o c um e n t .
D a ta E n try .I te m 3 .v a lu e C a lc u lateT o tals ()
}
fu n c t ion C a lc u la te T o ta ls ( )
{
w i th ( w indow .doc um e n t .D a ta E n try )
{
//C a lc u la te th e ite m s u b to ta ls .
nT o ta l I te m s = pa r se In t( I te m 1 . v a lu e ) + pa rs e In t( I te m 2 .v a lu e ) + p a r se In t( I te m 3 . v a lu e )
nT o ta l A m ount = pa rs e F lo a t( I te m 1E x .va lu e ) + p a r se F lo a t( I te m 2E x .v a lu e )+ p a rs eF lo at( I te m 3
Ex . v a lu e )
// C a lu te th e to ta l a m o u n ts .
nH a nd ling = nT o ta l I te m s * 5 nT a x = n T o ta l A m o u nt * . 0 5
n T o tal = p a r s eF lo at( n T o ta l A m o u n t) + p a r seF lo at( n H a n d l in g ) + p a r s eF lo at( n T a x )
// S to re th e d a ta .
H a nd ling .va lu e = n H a n d l in g
T a x .va lu e = nT a x
T o ta l.v a lu e = n T o ta l
}
}
//-->
< / SC R IPT >
< / H E A D >
< B ODY>
< ! 加入一个 标题 . - >
<C E N T E R > <H 1 > Sa m 's Sp e c ia l O rd e r Fo rm < / H 1 >< C E N T E R >
< H 3 > < M AR QUE E W IDT H= 5 0 % L OOP = INF IN IT E >
G e t I t W h ile I t 's H o t! S a m 's is k n o w n th e w o r ld o v e r fo r re a lly H O T ite m s ! S a m s w ill n o t b e h e ld re s p o n s ib le fo r s to le n ite m s , b u t th e n y o u 're
not re a l ly w o r r ie d a b out th a t if y ou 're s h o p p in g h e re .
< / M A R Q U E E > < / H 3 >
< ! 创建一个 窗体 . - >
< F OR M NAM E = " D a ta E n try " >
<!- 把订货项 目表格放入窗 体 表格包括 四列 q u a n tity ( 数量 ) , de s c r ip tion( 说明 ),
< !
- un it pric e ( 单价 ) 和 ex te n d ed p r ice( 合计 ) 用户只 需在 q u a n tity ( 数量 ) 栏中 ->
<!- 打入数量 即可 ->
< T AB L E W IDT H= 1 0 0 % B O R D E R = 1 >
<T R >
<T R >
<T R >
<T R >
< T H W ID T H = 3 0 > Q u a n tity < / T H >
< T H> D e s c r ip t io n < / T H >
< T H W IDT H= 7 5 > U n i t P r ic e < / T H>
< T H W IDT H= 7 5 > E x te n e d P r ic e < / T H>
< T D> < INP UT T Y P E = " te x t" NAM E = " I te m 1 " VAL UE = " 0 " S IZ E = 3
ONC HANGE = C a lc u la te I te m 1 ( 2 4 .9 9 )> < / T D>
< T D > R e m ove I t S h a v in g M u g< / T D >
< T D > $ 24 .9 9 < / T D >
< T D > $ < IN P U T TY P E = " te x t" N A M E= " I te m 1 Ex " V A L U E = " 0 " S IZE= 7 > < / TD >
< T D> < INP UT T Y P E = " te x t" NAM E = " I te m 2 " VAL UE = " 0 " S IZ E = 3
ONC HANGE = C a lc u la te I te m 2 ( 3 9 .9 9 )> < / T D>
< T D > R a m p a g in g W illy D o ll< /T D >
< T D > $ 39 .9 9 < / T D >
< T D > $ < IN P U T TY P E = " te x t" N A M E= " I te m 2 Ex " V A L U E = " 0 " S IZE= 7 > < / TD >
< T D> < INP UT T Y P E = " te x t" NAM E = " I te m 3 " VAL UE = " 0 " S IZ E = 3
<T R >
<T R >
<T R >
ONC HANGE = C a lc u la te I te m 3 ( 1 9 .9 5 )> < / T D >
< T D> Y o u S a id I t! G a m e < / T D >
< T D > $ 19 .9 5 < / T D >
< T D > $ < IN P U T TY P E = " te x t" N A M E= " I te m 3 Ex " V A L U E = " 0 " S IZE= 7 > < / TD >
<T D > < IN P U T T Y P E = " h id d e n " >< / T D >
< T D A L IG N = R ig h t> < H 3> S h ip p in g a n d H a nd lin g (@ $ 5 .0 0 / I te m )< / H 3> < / T D >
<T D > < IN P U T T Y P E = " h id d e n " >< / T D >
< T D > $ < IN P U T TY P E = " te x t" N A M E= " H a n d l in g " V A L U E = " 0 " S IZE= 7 > < / TD >
<T D > < IN P U T T Y P E = " h id d e n " >< / T D >
<T D A L IG N = R ig h t> <H 3 > T a x (@ $ 5 % )< / H 3 > < / T D >
<T D > < IN P U T T Y P E = " h id d e n " >< / T D >
< T D > $ < IN P U T TY P E = " te x t" N A M E= " T a x " V A L U E = " 0 " S IZE= 7 > < / TD >
<T D > < IN P U T T Y P E = " h id d e n " >< / T D >
< T D AL IG N = R ig h t> < S T R O NG> < H 3 > T o ta l< / H 3 > < / S T R O NG> < / T D >
<T D > < IN P U T T Y P E = " h id d e n " >< / T D >
< T D > $ < IN P U T TY P E = " te x t" N A M E= " T o ta l" V A L U E = " 0 " S IZE= 7 > < / TD >
< / TA B L E>
< / FO R M >
< / B ODY>
< / H T M L >
图 9 .3 S a m 的订 货单 窗体 自动 计算 出用 户全部 订货 的费用 总额
让 我 们 从 讨 论 本 例 中 的 HT M L 代 码 开 始 首 先 它 含 有 一 个 新 标 记
< M A R Q U EE> 用 于 显 示 滚 动 的 文 本 用 这 一 标 记 还 能 滚 动 图 像 ─ ─ 绝 大 多 数程 序 员 都 这 样 做 这 一 标 记 的 文 本 处 理 能 力 受 到 一 些 限 制 加 到 < M A R Q U EE> 标 记 中 的 花 体 文 本 不 在 屏 幕 上 出 现 开 始 时 文 本 什 么 样 则 文 本 一 直 保 持这 个 样 这 意 味 着 在 实 际 显 示 字 幕 之 前 先 要 做 些 格 式 化 这 也 正 是 许 多 程 序员 宁 可 使 用 图 像 的 原 因
警 告 <MARQUEE> 标 记 不 能 在 Netscape Navigator 浏 览 器 中 工 作 如 果 对标 记 进 行 的 格 式 化 正 确 那 么 在 Netscape Navigator 浏 览 器 中 看到 的 是 如 图 9.3 中 所 示 的 居 中 化 了 的 字 幕 文 本 使 用 <MARQUEE> 标 记时 总 是 要 使 用 LOOP 属 性 因 为 如 果 不 使 用 LOOP 属 性 支 持 <MARQUEE> 的 有 些 浏 览 器 就 会 做 出 奇 怪 的 反 应 你 第 一 次 实 施 这 个 特 定 标 记 时注 意 收 集 用 户 反 馈 是 非 常 重 要 的 这 是 由 于 在 旧 式 的 浏 览 器 上 它 非常 容 易 引 起 麻 烦 进 行 一 些 小 改 动 也 许 就 能 使 你 的 站 点 上 使 用 的 这个 标 记 在 确 实 支 持 这 个 标 记 的 浏 览 器 中 工 作
后 面 一 段 HT M L 代 码 是 如 何 使 用 表 格 的 范 例 这 里 用 表 格 创 建 了 订 货 单 请 注 意 几 个 部 分 都 用 了 W ID T H 属 性 使 用 这 一 属 性 的 方 式 有 两 种 要 么 给 出占 用 整 个 屏 幕 的 百 分 比 要 么 给 出 占 用 实 际 屏 幕 的 具 体 数 量 如 果 使 用 百 分 比当 用 户 改 变 显 示 的 大 小 时 占 用 空 间 仍 保 持 这 一 比 例 还 要 注 意 四 个 表 头 标题 中 的 三 个 都 用 了 W ID T H 属 性 D e s c r ip t io n 说 明 标 题 则 占 用 其 它 三 项 剩 余的 那 一 部 分 可 以 发 现 无 论 用 户 屏 幕 的 分 辨 率 是 多 少 也 不 管 他 们 怎 样 改 变浏 览 器 的 窗 口 大 小 这 种 非 常 简 便 的 方 法 都 能 向 用 户 提 供 一 个 具 有 吸 引 力 的 窗
体
< INP UT > 标 记 中 也 有 几 个 变 化 代 码 中 使 用 了 S IZ E 属 性 可 以 保 持 输 入 的
文 本 有 具 体 的 大 小 还 可 以 看 到 < INP UT > 标 记 的 新 类 型 隐 藏 控 件 能 够 跳过 表 格 中 那 些 凸 起 部 分 再 把 图 9 .3 看 一 遍 就 会 注 意 到 在 计 算 总 额 时 隐藏 控 件 通 过 恢 复 凸 起 的 外 观 来 保 持 Q u a n tity 数 量 域
现 在 来 看 一 下 J a va S c r ipt 我 们 把 所 有 函 数 都 放 进 了 一 个 HT M L 注 释 中 理由 非 常 简 单 那 就 是 防 止 旧 式 的 浏 览 器 读 窗 体 时 发 生 问 题 还 应 注 意 到 HT M L 注 释 标 记 的 第 二 部 分 是 //--> 如 果 不 用 双 斜 线 双 斜 线 是 J a va S c r ipt 和 V is u a l C+ + 中 的 注 释 那 么 N e ts c a pe N a v iga to r 的 J a va S c r ipt 解 释 程 序 就 试 图 对 这 一行 做 些 事 ─ ─ 好 象 它 是 一 行 代 码 而 In te rn e t E x p lo re r 忽 略 这 一 注 释 行 它 意 味着 能 够 简 单 地 结 束 像 --> 这 样 的 行 像 注 释 标 记 这 样 的 小 事 也 能 产 生 很 大 差 别
你 的 代 码 是 仅 能 在 一 种 浏 览 器 上 工 作 还 是 可 以 在 多 个 浏 览 器 上 工 作 理 解 这一 点 非 常 重 要
前 三 个 函 数 相 当 简 单 每 一 个 都 是 监 督 着 Q u a n tity 行 元 素 的 变 化 发 生 一个 变 化 后 就 计 算 该 项 订 货 的 合 计 金 额 然 后 调 用 函 数 来 计 算 订 单 中 底 部 的 总计 栏 把 三 个 计 算 组 合 到 一 个 函 数 中 也 是 可 能 的 这 样 做 在 一 定 程 度 上 使 程 序更 快 能 减 少 代 码 的 复 杂 度 而 且 也 不 增 加 函 数 调 用 开 销
可 移 植 性 你 会 发 现 Netscape Navigator 的 JavaScript 版 本 比 Internet Explorer 所 提 供 的 JavaScript 版 本 要 严 格 得 多 你 必 须 重 视 浏 览 器间 存 在 的 两 个 极 重 要 的 差 别 前 面 例 子 的 JavaScript 代 码 程 序 列表 9.1 中 CalculateI tem1() 函 数 中 有 一 行 :
Window.Dat aEntry.Item1Ex.Value =nAmount * Window. DataEntry. Item1. Val ue 它 在 Internet E xplorer 上 工 作 得 很 好 如 果 看 一下 程 序 列 表 9 . 1 中 的 同 一 行 就 会 发 现 两 个 差 别 首 先 代 码 的 这 个版 本 不 区 分 大 小 写 看 一 下 Window 对 象 ─ ─ 当 你 在 Activex Control P a d 的 脚 本 向 导 中 查 看 时 它 是 小 写 另 一 方 面 Netscape 却 区 分 大 小写 你 绝 对 要 打 入 小 写 的 window 才 能 使 脚 本 工 作 还 应 注 意 到这 时 的 DataEntry 直 接 跟 在 Window 之 后 即 Internet Explorer 不要 求 使 用 完 全 限 定 的 对 象 路 径 而 Netscape Navigator 却 要 求 使 用完 全 限 定 的 对 象 路 径 到 达 DataEntry 窗 体 的 对 象 路 径 的 完 全 限 定版 本 应 该 是 window.doc ument.DataEntry 在 写 出 代 码 时 一 定 要 牢记 这 些 差 别 否 则 就 要 为 找 出 脚 本 中 的 莫 名 其 妙 的 错 误 而 花 费 一 个星 期 天 了
有 必 要 对 C a lc u la te T o ta ls ( ) 函 数 看 仔 细 些 因 为 在 使 用 J a va S c r ipt 窗 体 时 用了 几 个 开 始 时 你 也 许 未 注 意 到 的 技 巧 使 用 W ith ( ) 函 数 能 够 减 少 键 入 代 码的 数 量 对 于 “ w indow . doc um e n t. D a ta E n tr y ” 使 用 了 这 个 函 数 后 只 须 打 一 遍即 可 而 不 必 每 次 用 到 时 都 打 一 遍
由 于 J a va S c r ipt 是 一 种 松 散 类 型 的 语 言 本 节 开 始 时 它 直 接 保 持 变 量 实 际 类型 的 处 理 方 式 也 许 会 使 你 感 到 惊 奇 事 实 上 在 有 些 地 方 它 不 能 很 好 地 完成 任 务 这 时 就 需 要 做 一 些 额 外 的 工 作 看 一 下 第 一 组 计 算 可 以 注 意 到 三 个对 象 的 值 都 被 放 到 Pa rs e In t( ) 函 数 调 用 之 中 这 个 调 用 告 诉 J a va S c r ipt 要 把 串 转换 成 数 值 如 果 不 用 这 个 函 数 那 么 就 是 把 三 个 串 联 结 成 一 个 长 串 而 不 是 按
要 求 将 它 们 加 起 来 下 一 行 也 是 这 样 的 问 题 这 时 因 为 是 三 个 带 有 美 元 符 号的 值 所 以 使 用 了 P a rs e f lo a t() 函 数 这 样 做 虽 然 不 是 最 好 的 方 案 但 它 确 实 有效
最 后 应 该 注 意 到 C a lc u la te T o ta l( ) 函 数 使 用 了 许 多 中 间 变 量 中 间 变 量 帮助 J a va S c r ipt 直 接 保 持 变 量 的 类 型 并 且 使 得 代 码 可 读 性 增 强 如 果 担 心 中 间变 量 使 用 的 内 存 太 大 少 用 一 两 个 中 间 变 量 也 是 完 全 可 以 的
技 巧 在 Activex Control P a d 中 如 果 打 算 使 用 JavaScript 语 言 取 代VBScript 语 言 一 定 要 用 Tools|Opti ons|Script 命 令 进 行 当 前 版本 倾 向 于 在 每 个 会 话 完 成 后 就 丢 失 这 一 设 置 把 Script Wiz ard 所作 变 化 逆 转 过 来 需 要 用 很 多 时 间
- 4 使 用 Ac ti ve X 控 件
信 不 信 由 你 将 脚 本 HT M L 和 A c tiv e X 控 件 组 合 起 来 使 用 实 际 地 创 建一 些 令 人 震 撼 的 W e b 页 你 已 万 事 俱 备 现 在 需 要 做 的 唯 一 一 件 事 就 是 把 你所 学 的 全 部 知 识 装 配 起 来 再 附 加 一 些 信 息 就 足 够 了
和 前 面 小 节 中 一 样 我 们 来 看 一 个 使 用 J a va S c r ipt 的 例 子 差 别 是 现 在 我们 把 一 切 东 西 跟 对 象 装 配 在 了 一 起 因 为 我 们 在 本 书 余 下 部 分 要 研 究 更 复 杂 的问 题 所 以 这 里 的 例 子 的 目 的 非 常 简 单 非 常 重 要 的 是 从 现 在 开 始 要 把 基 本 知识 牢 记 在 心
本 节 中 我 们 会 看 到 使 用 A c tiv e X C o n tro l P a d 将 工 作 变 得 更 容 易 完 成 的 一种 方 式 尽 管 开 头 看 起 来 是 更 复 杂 了 我 们 全 部 使 用 A c tiv e X 控 件 从 现 在开 始 不 再 是 < INP UT > 标 记 来 创 建 一 个 半 功 能 性 的 窗 体 本 节 中 假 定 使 用 A c tiv e X C on tro l P a d 但 是 也 包 含 了 全 部 所 需 的 源 代 码 这 样 做 潜 在 地 使 你 能 够 用 其 它方 法 创 建 它 要 做 的 第 一 件 事 是 新 创 建 另 一 个 HT M L 页 和 一 个 使 用 A c tiv e X C on tro l P a d 的 HT M L 框 架 N e w 新 建 按 钮 允 许 创 建 文 档
保 存 空 的 HT M L 框 架 使 用 Ed it 编 辑 |Ins e r t H T M L L a y o ut 插 入 HT M L 框 架 命 令 将 框 架 插 入 到 HT M L 页 中 再 添 加 一 个 标 题 以 解 释 这 一 文 档 是 干 什么 用 的 HT M L 页 这 时 就 完 成 了 在 这 个 例 子 中 不 用 再 做 什 么 事 了 程 序 列 表
9 .2 列 出 了 这 个 HT M L 页 的 代 码
程 序 列 表 9 . 2
<H T M L >
<H E A D >
< T IT L E > U s ing A c t iv e X C o n tro l w i th J a va S c r ipt a n d H T M L L a y o u t< / T IT L E >
< / H E A D >
< B ODY>
<!- 加入标题 ->
< C E N T E R > < H 1 > U s in g J a v a S c r ip t w ith A c tiv e X C o n tro ls O n a n H T M L L a y o u t< / H 1 >
<!- 插入框架 ->
< O B J E C T C L A S SID = " C L S ID : 812A E 3 12- 8 B 8E - 1 1 C F - 93 C 8 - 0 0 A A 0 0C 0 8 F D F " ID = " L a y ou t1_ a lx" S T Y L E = " L E F T : 0 ; T O P : 0" >
< P AR AM N A M E = " AL XP AT H" R E F VAL UE = " L a y o u t 1 .a lx " >
< / O B J E C T >
< / B ODY>
< / H T M L >
注 释 这 个 例 子 的 Web 页 仅 适 用 于 Internet Explorer 需 要 使 用 类 似NCompass ScriptActi ve 的 插 件 使 这 个 页 在 Netscape Navigator 上工 作 本 书 后 面 我 们 讨 论 这 个 过 程 现 在 仅 适 用 于 Internet Explorer 的 示 例 让 代 码 简 单 些 从 而 使 你 能 够 清 楚 地 看 到 它 们 的 工 作 原 理
图 9 .4 使用 HT M L 框架 控件 能够 将 A c t iv e X 控件 精确 地定 位到 W e b 页上
现 在 来 干 些 容 易 干 的 事 首 先 看 一 下 HT M L 框 架 图 9 .4 显 示 了 本 例 中 使用 的 一 组 A c tiv e X 控 件 你 要 完 成 的 工 作 就 是 在 T oo lb o x 工 具 箱 中 单 击 一 个控 件 然 后 把 它 放 到 画 布 上 如 果 喜 欢 的 话 A c tiv e X C o n tro l P a d 还 允 许 使用 拖 放 操 作 向 画 布 添 加 控 件 控 件 放 到 画 布 后 可 以 把 它 拖 曳 到 任 何 需 要 的位 置 然 后 再 改 变 其 大 小 使 之 与 同 一 区 域 中 的 其 它 控 件 相 匹 配 功 能 框 架 上与 图 9 .4 中 所 示 的 有 些 不 一 样 但 该 框 架 的 设 计 目 的 是 向 你 展 示 组 合 使 用 A c tiv e X
控 件 和 J a va S c r ipt 的 具 体 特 色 请 留 意 从 T o o lbox 中 取 用 的 控 件 都 是 A c tiv e X 控件
该 给 这 个 示 例 增 加 一 些 功 能 了 和 VB S c r ip t 一 样 J a va S c r ipt 也 要 求 在 向 按钮 或 其 它 控 件 派 发 函 数 时 要 执 行 一 些 特 殊 的 函 数 名 称 格 式 化 还 有 一 种 容 易的 方 法 来 产 生 函 数 名 这 就 是 使 用 S c rip t W iz a rd 脚 本 向 导 来 产 生 函 数 名使 用 T oo ls 工 具 |S crip t W izard 脚 本 向 导 命 令 打 开 Sc r ip t W iz a rd 脚本 向 导 然 后 为 一 个 按 钮 选 择 C lic k 单 击 事 件 在 S c rip t W iz a rd 脚 本 向导 对 话 框 底 部 就 会 看 到 L is t V ie w 列 表 视 图 和 C ode V ie w 代 码 视 图 这两 个 单 选 按 钮 单 击 C ode V ie w 这 个 单 选 按 钮 就 会 看 到 对 话 框 底 部 发 生 变 化如 图 9 .5 所 示 看 一 下 对 话 框 底 部 三 分 之 一 处 的 灰 色 条 注 意 到 它 清 楚 地 说 明了 如 何 格 式 化 你 的 J a va S c r ipt 函 数 调 用 若 选 择 了 VB S c r ip t 代 替 Ja v a S c r ip t 作为 语 言 选 择 那 么 将 显 示 出 过 程 调 用 的 VB S c r ip t 版 本
图 9 .5 S c r ip t W izard 帮助 你处 理一 个对象 所需 的过 程或函 数的 名称
现 在 到 了 添 加 一 些 J a va S c r ipt 使 控 件 生 效 的 时 候 了 关 闭 S c r ip t W izard 脚本 向 导 如 果 还 没 关 闭 的 话 用 右 键 单 击 框 架 从 关 联 菜 单 中 选 择 V iew S o u rce
C ode 查 看 源 代 码 A c tiv e X C o n tro l P a d 可 能 要 求 你 先 保 存 框 架 那 么 按要 求 进 行 保 存 然 后 就 会 看 到 一 个 N o te P a d 或 W r iteP ad 这 取 决 于 框 架 有 多 大 文 本 文 件 不 要 破 坏 已 存 在 的 <O B J E C T > 标 记 添 加 如 程 序 列 表 9 .3 所 示 的 代 码程 序 列 表 也 列 出 了 < O B J E C T > 标 记 因 为 也 许 你 会 手 工 创 建 这 个 文 件 本章 最 后 的 图 9 .6 显 示 的 是 HT M L 脚 本 和 框 架 页 组 合 起 来 在 浏 览 器 所 看 到 的 样
子
程 序 列 表 9 . 3
<!- 这个脚本 用数据填充组 合框 ->
< S C R IP T F O R = " C o m m a n d B u t to n 1 " EV EN T= " C l ic k ( ) " >
fo r ( n C ount = 1; nC ou nt < C om b o B o x 1 .L is t R ow s ; nC o un t+ + )
{
C o m boB ox1 .A ddIte m (" I te m " + nC o u n t)
}
C o m boB ox 1 .L is t In d e x = 0;
< / SC R IPT >
<!- 这个脚本 提取当前组合 框的值 ->
< S C R IP T F O R = " C o m m a n d B u t to n 2 " EV EN T= " C l ic k ( ) " > T e x t B o x 1 . T e x t = C o m boB o x 1 .T e xt
< / SC R IPT >
<!- 这些对象 都是机器创建 的 不要修改 ->
< D IV ID = " L a y o u t 1 " S T YL E = " L AYOU T : F IXE D ; W IDT H : 4 0 0 p t ; H E IGHT :3 0 0 p t ;" >
< O B J EC T ID = " La b e l1 "
C L A S S ID = " C L S ID : 9 78C 9E 2 3 - D 4 B 0- 1 1 C E - B F 2 D
- 00 A A 00 3F 4 0 D 0 "
C O D E B A S E = " h ttp ://a u x / c o n tro ls "
S T Y L E = " T O P : 17p t; L E F T : 8p t; W ID T H : 124p t; H E IG H T : 17 p t; Z IN D E X : 0 ;" >
< P A R A M N A M E = " C a p t ion" V A L U E = " S o m e C o m bo B o x S e le c t ions :" >
< P AR AM N A M E = " S iz e " VA L U E = " 4 3 7 4 ; 6 0 0 " >
< P AR AM N A M E = " F o n t C h a r S e t" VAL UE = " 0 " >
< P AR AM N A M E = " F o n t P i tc h A n d F a m i ly " VAL UE = " 2 " >
< P AR AM N A M E = " F o n t W e ig h t" V A L U E = " 0 " >
< / O B J E C T >
< O B J EC T ID = " C o m b o B o x 1 "
C L A S S ID = " C L S ID : 8 B D 2 1 D 3 0 - E C 4 2 - 1 1 C E - 9E 0 D - 0 0 A A 0 06 00 2F 3"
C O D E B A S E = " h ttp ://a u x / c o n tro ls "
S T Y L E = " T O P : 33p t; L E F T : 8p t; W ID T H : 107p t; H E IG H T : 18 p t; T A B IN D E X : 1 ; Z IN D E X :1 ;" >
< P A R A M N A M E = " V a r ious P ro p e r ty B i ts " V A L U E = " 7466 04 5 7 1" >
< P AR AM N A M E = " D is p la y S ty le " V A L U E = " 3 " >
< P AR AM N A M E = " s iz e " VAL UE = " 3 7 7 5 ;6 3 5 " >
< P AR AM N A M E = " M a tc h E n try " VAL UE = " 1 " >
< P AR AM N A M E = " S h o wD ro p B u t to n W h e n " VAL UE = " 2 " >
< P AR AM N A M E = " F o n t C h a r S e t" VAL UE = " 0 " >
< P AR AM N A M E = " F o n t P i tc h A n d F a m i ly " VAL UE = " 2 " >
< P AR AM N A M E = " F o n t W e ig h t" V A L U E = " 0 " >
< / O B J E C T >
< O B J EC T ID = " C o m m a n d B u t to n 1 "
C L A S S ID = " C L S ID : D 7 0 53 24 0- C E 69 - 1 1 C D - A 7 77 - 0 0 D D 0 11 4 3 C 57"
C O D E B A S E = " h ttp ://a u x / c o n tro ls "
S T Y L E = " T O P :2 5 p t;L E F T : 1 4 0 p t;W ID T H :7 2 p t;H E IG H T :2 4 p t;T A B IN D E X :2 ; Z IN D E X : 2 ;" >
< P A R A M N A M E = " C a p tio n " V A L U E = " F ill C o m b o B o x " >
< P AR AM N A M E = " S iz e " VA L U E = " 2 5 4 0 ; 8 4 7 " >
< P AR AM N A M E = " F o n t C h a r S e t" VAL UE = " 0 " >
< P AR AM N A M E = " F o n t P i tc h A n d F a m i ly " VAL UE = " 2 " >
< P AR AM N A M E = " P a ra g ra p h A l ig n " VAL UE = " 3 " >
< P AR AM N A M E = " F o n t W e ig h t" V A L U E = " 0 " >
< / O B J E C T >
< O B J EC T ID = " La b e l2 "
C L A S S ID = " C L S ID : 9 78C 9E 2 3 - D 4 B 0- 1 1 C E - B F 2 D
- 00 A A 00 3F 4 0 D 0 " S T Y L E = " T O P : 74p t; L E F T : 8p t; W ID T H : 107p t; H E IG H T : 17 p t; Z IN D E X : 3 ;" >
< P AR AM N A M E = " C a p t io n " VAL UE = " C u r re n t C o m b o B o x S e le c t io n :" >
< P AR AM N A M E = " S iz e " VA L U E = " 3 7 7 5 ; 6 0 0 " >
< P AR AM N A M E = " F o n t C h a r S e t" VAL UE = " 0 " >
< P AR AM N A M E = " F o n t P i tc h A n d F a m i ly " VAL UE = " 2 " >
< P AR AM N A M E = " F o n t W e ig h t" V A L U E = " 0 " >
< / O B J E C T >
< O B J EC T ID = " Te x t B o x 1 "
C L A S S ID = " C L S ID : 8 B D 2 1 D 1 0 - E C 4 2 - 1 1 C E - 9E 0 D - 0 0 A A 0 06 00 2F 3"
S T Y L E = " T O P : 91p t; L E F T : 8p t; W ID T H : 107p t; H E IG H T : 25 p t; T A B IN D E X : 4 ; Z IN D E X :4 ;" >
< P A R A M N A M E = " V a r ious P ro p e r ty B i ts " V A L U E = " 7466 04 5 7 1" >
< P AR AM N A M E = " S iz e " VA L U E = " 3 7 7 5 ; 8 8 2 " >
< P AR AM N A M E = " F o n t C h a r S e t" VAL UE = " 0 " >
< P AR AM N A M E = " F o n t P i tc h A n d F a m i ly " VAL UE = " 2 " >
< P AR AM N A M E = " F o n t W e ig h t" V A L U E = " 0 " >
< / O B J E C T >
< O B J EC T ID = " C o m m a n d B u t to n 2 "
C L A S S ID = " C L S ID : D 7 0 53 24 0- C E 69 - 1 1 C D - A 7 77 - 0 0 D D 0 11 4 3 C 57"
S T Y L E = " T O P :9 1 p t;L E F T : 1 4 0 p t;W ID T H :7 2 p t;H E IG H T :2 4 p t;T A B IN D E X :5 ; Z IN D E X : 5 ;" >
< P AR AM N A M E = " C a p t io n " VAL UE = " G e t S e le c t io n " >
< P AR AM N A M E = " S iz e " VA L U E = " 2 5 4 0 ; 8 4 7 " >
< P AR AM N A M E = " F o n t C h a r S e t" VAL UE = " 0 " >
< P AR AM N A M E = " F o n t P i tc h A n d F a m i ly " VAL UE = " 2 " >
< P AR AM N A M E = " P a ra g ra p h A l ig n " VAL UE = " 3 " >
< P AR AM N A M E = " F o n t W e ig h t" V A L U E = " 0 " >
< / O B J E C T >
< / D IV >
图 9 .6 H T M L 框架 在浏 览器 中是不 可见 的 但使用 它的 效果是 可见 的
程 序 列 表 9 .3 中 的 两 个 脚 本 是 很 简 单 的 第 一 个 脚 本 说 明 怎 样 填 充 一 个 组 合框 真 正 要 你 做 的 只 不 过 是 使 用 A ddIte m 添 加 项 方 法 告 诉 组 合 框 你 想 添加 些 什 么 填 充 了 组 合 框 后 使 用 L is t In d e x 列 表 索 引 属 性 设 置 缺 省 的 选 择如 果 不 这 样 做 甚 至 在 你 填 充 之 后 用 户 还 会 继 续 看 到 一 个 空 白 的 组 合 框 列 表索 引 从 0 开 始
使 用 A c tiv e X 对 象 的 问 题 之 一 是 不 运 行 就 不 能 做 一 些 安 装 工 作 例 如运 行 之 前 不 能 用 值 去 填 充 组 合 框 用 属 性 对 话 框 试 一 试 使 用 脚 本 语 言 操 作A c tiv e X 的 整 个 想 法 是 给 你 一 种 以 前 从 未 见 到 过 的 灵 活 选 择
存 在 多 种 方 法 能 估 计 出 用 户 做 的 选 择 是 什 么 若 需 要 一 个 数 值 的 选 择 数
那 么 可 以 从 L is t In d e x 属 性 中 得 到 它 我 们 这 儿 需 要 一 个 串 值 所 以 最 好 使 用 Te x t 属 性 这 正 是 第 二 个 脚 本 所 完 成 的 工 作 它 只 不 过 是 把 C o m boB ox1 . T e xt 属 性的 值 拷 贝 到 T e x t B ox1 .T e xt 属 性 中 去 而 已