XHTML MP 所失去的 WML 的特征
一些 WML 1.x 中可用的特征在 XHTML MP 中已经不存在了. 在这一部分中, 你将学到 WML 1.x 与 XHTML MP 之间的这些区别. 这一部分对于那些熟悉 WML 但对于 XHTML MP 来说是新手的人, 或者那些想把他们的移动因特网应用从 WML 1.x 迁移到 XHTML MP的人来说, 特别有用.
尽管失去了 WML 的一些特征, 在 XHTML MP 中还是有实现类似效果的方法的. 应该注意到, WAP 2.0 对 WML 1.x 是后向兼容的, 这就意味着 WAP 2.0 移动设备能够显示 WML 1.x 文档. 如果你必须要使用一个在 WML 中有效但在 XHTML MP 中无效的特征, 那么你可以考虑用 WML 1.x 开发你的 WAP 应用.
这些是 XHTML MP 所丢失的主要的 WML 语言的特征:
XHTML MP 不支持 Deck 与 Card
XHTML MP 不支持计时器
XHTML MP 不支持事件
XHTML MP 不支持变量
XHTML MP 不支持客户端脚本
XHTML MP 不支持对软键 (accesskey) 编程
XHTML MP 不支持 <u> 标签
XHTML MP 的输入字段不支持格式化属性
XHTML MP 不支持用锚链接发送数据
XHTML MP 不支持 Deck 与 Card
WML 中的 <deck> 和 <card> 元素在 XHTML MP 中已经不存在了. 在 WML 中, 一个文件可以包含一张或多张 card. 它们共同形成了一个 deck. 一个 deck 中所有的 card 都会被一次下载到无线设备上. WAP 浏览器一次显示一张 card , 你可以通过锚链接去其它卡片. 通过使用 deck 和 card, 与服务器的交互得以减少. 从而可能会有很大的性能提高, 因为对无线设备来说, 每次对服务器的请求的滞后性很高.
要在 XHTML MP 中达到类似的功能, 你可以把消息分成多个部分 (多个文档放到一个 HTTP 反馈中). 另一种方式是通过利用目标锚 (目标锚放到页面中的各个位置, 并且将链接定义为流动到相应的目标锚. 更多细节将稍后在 "到当前 XHTML MP 页面的某个地方" 中提到).
XHTML MP 不支持计时器
要在 WML 中使用计时器, 你可以用 <timer> 标签和 ontimer 事件. <timer> 标签和 ontimer 事件在 XHTML MP 中都不被支持.
要在 XHTML MP 中实现类似的功能, 尝试一下 HTTP 刷新, 像这样:
<head><meta http-equiv="refresh" content="5;URL=http://www.phparch.cn/" />...</head>
在上面的 XHTML MP 例子中, <meta> 元素告诉 WAP 浏览器10秒后转到 URL "http://www.phparch.cn". 要注意的是 WML 计时器只有在用户前进到卡片 (card) 时才会开启, 而 HTTP 刷新计时器无论用户何时到达 XHTML MP 页面都会开启.
关于 HTTP 刷新的更多细节将在稍后的 "XHTML MP 中的间歇性刷新" 中提到.
XHTML MP 不支持事件
XHTML MP 不支持事件. WML 支持四种事件: ontimer, onenterbackward, onenterforward 和 onpick. 就像在上一部分讨论的那样, HTTP 刷新可以模拟 ontimer 事件. 对于其它事件类型, 在 XHTML MP 中没有替代方案. 如果你的移动因特网浏览应用必须用到它们, 那么你不得不考虑用 WML 1.x 取代 XHTML MP.
XHTML MP 不支持变量
在 WML 中, 你可以声明变量并对其赋值. WML 的变量都具有全局范围, 也就意味着你可以在任何 deck 与 card 标签中使用它们. 在 WML 中常见的对变量的使用是用其存储用户输入的数据以免其稍后还要再次输入.
在 XHTML MP 中你无法使用变量. 替代方案是把所有的处理放在服务器端进行. 例如, 如果你想把用户在某一 XHTML MP 页面上输入的数据共享到其它 XHTML MP 页面, 就要把数据发送到并存储在服务器上. 然后服务器可以在必要的时候把用户数据嵌入到 XHTML MP 标记中, 并将其发送到无线设备.
XHTML MP 不支持客户端脚本
在 WML 中, 你可以用一种叫作 WMLScript 的脚本语言, 该语言与 JavaScript 类似. WMLScript 在 WML 中的一种常见应用是验证用户输入的数据.
对于 XHTML MP, 客户端脚本目前是无效的. 替代方案是把所有的处理放在服务器端进行. 例如, 可以把用户数据发送到服务器端处理, 而不是在无线设备上验证用户数据. 如果用户数据格式有误, 超出了有效范围, 或者用户忘记输入某些字段, 服务器会引导用户去一个 XHTML MP 页面来纠正数据.
将来的移动设备将支持一种叫作 ECMAScript 移动概要 (ESMP) 的客户端脚本语言, 该语言被设计用于 XHTML MP 之中. 它支持所有 WMLScript 功能.