日期:2014-05-17 浏览次数:20752 次
一些 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 语言的特征:
WML 中的 <deck> 和 <card> 元素在 XHTML MP 中已经不存在了. 在 WML 中, 一个文件可以包含一张或多张 card. 它们共同形成了一个 deck. 一个 deck 中所有的 card 都会被一次下载到无线设备上. WAP 浏览器一次显示一张 card , 你可以通过锚链接去其它卡片. 通过使用 deck 和 card, 与服务器的交互得以减少. 从而可能会有很大的性能提高, 因为对无线设备来说, 每次对服务器的请求的滞后性很高.
要在 XHTML MP 中达到类似的功能, 你可以把消息分成多个部分 (多个文档放到一个 HTTP 反馈中). 另一种方式是通过利用目标锚 (目标锚放到页面中的各个位置, 并且将链接定义为流动到相应的目标锚. 更多细节将稍后在 "到当前 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 不支持事件. WML 支持四种事件: ontimer, onenterbackward, onenterforward 和 onpick. 就像在上一部分讨论的那样, HTTP 刷新可以模拟 ontimer 事件. 对于其它事件类型, 在 XHTML MP 中没有替代方案. 如果你的移动因特网浏览应用必须用到它们, 那么你不得不考虑用 WML 1.x 取代 XHTML MP.
在 WML 中, 你可以声明变量并对其赋值. WML 的变量都具有全局范围, 也就意味着你可以在任何 deck 与 card 标签中使用它们. 在 WML 中常见的对变量的使用是用其存储用户输入的数据以免其稍后还要再次输入.
在 XHTML MP 中你无法使用变量. 替代方案是把所有的处理放在服务器端进行. 例如, 如果你想把用户在某一 XHTML MP 页面上输入的数据共享到其它 XHTML MP 页面, 就要把数据发送到并存储在服务器上. 然后服务器可以在必要的时候把用户数据嵌入到 XHTML MP 标记中, 并将其发送到无线设备.
在 WML 中, 你可以用一种叫作 WMLScript 的脚本语言, 该语言与 JavaScript 类似. WMLScript 在 WML 中的一种常见应用是验证用户输入的数据.
对于 XHTML MP, 客户端脚本目前是无效的. 替代方案是把所有的处理放在服务器端进行. 例如, 可以把用户数据发送到服务器端处理, 而不是在无线设备上验证用户数据. 如果用户数据格式有误, 超出了有效范围, 或者用户忘记输入某些字段, 服务器会引导用户去一个 XHTML MP 页面来纠正数据.
将来的移动设备将支持一种叫作 ECMAScript 移动概要 (ESMP) 的客户端脚本语言, 该语言被设计用于 XHTML MP 之中. 它支持所有 WMLScript 功能.
XHTML MP 不支持对软键 (softkey) 编程
?可编程软件是 WML 的一个非常棒的特征. WML 的 <do> 标签可以用来对软键编程. 用户可以通过按移动电话上的左软键或右软键非常方便地选择常用选项.
在 XHTML MP 中你无法对软键编程. 一种替代方案是利用 accesskey 属性. accesskey 属性可用于指定键盘快捷键. 锚链接和提交按纽支持 accesskey 属性. 这是一个例子:
<a accesskey="1" href="/p1.xhtml">XHTML MP 教程第一部分</a><br/> <a accesskey="2" href="/p2.xhtml">XHTML MP 教程第二部分</a><br/> <a accesskey="3" href="/p3.xhtml">XHTML MP 教程第三部分</a>
?
如果用户按下键盘上的 "1" 键, WAP 浏览器将直接跳转到 "p1.xhtml". 有了 accesskey 属性, 用户能够通过在 XHTML MP 页面中点击一下就触发某个动作. 这种行为与通过软键所能实现的类似.
WAP CSS 的 -wap-accesskey 属性可用 accesskey 属性的一个替代选项.
在一些诺基亚的 WAP 浏览器上, 所有带有 accesskey 属性指定的键盘快捷键的锚链接和提交按纽都会自动被包含在选项菜单中. 用户可以通过点击左侧的软键来打开选项菜单. 选项菜单中锚链接的标签是被 <a></a> 标签所包围的文本. 对于图片链接和提交按纽, 菜单选项中的标签分别是 <img> 标签的 alt 属性值和 <input> 标签的 value 属性值. 例如:
<a accesskey="0" href="/p1.xhtml">XHTML MP 教程第一部分</a><br/> <a accesskey="1" href="/p2.xhtml"> <img src="/pic2.gif" height="20" width="20" alt="XHTML MP 教程第二部分" /> </a><br/> <form action="xhtml_mp_tut.php" method="get"> <p> 你最喜欢本 HTML MP 教程的哪一部分?<br/> <input type="text" name="tut_part" title="编辑" /><br/> <input accesskey="5