WML - 任务

WML 任务是一个元素,它指定浏览器要执行的操作,而不是要显示的内容。 例如,更换到新卡的动作由<go>任务元素表示,而返回到之前访问过的卡的动作由<prev>任务元素表示。 任务元素封装了执行操作所需的所有信息。

WML 提供以下四个元素来处理四个 WML 任务,分别称为 go 任务、pre 任务、刷新任务和 noop 任务。

<go> 任务:

顾名思义,<go>任务代表去一张新卡的动作。

<go> 元素支持以下属性:

属性描述
hrefURL给出新卡的 URL。 相对 URL 相对于当前卡片进行解析
method
  • get
  • post
指定用于获取deck的方法。 必须是get或post的值之一,对应HTTP的GET和POST方法。

当使用method="get"时,数据作为带有 ? 的请求发送。 附加到 url 的数据。 该方法有一个缺点,即它只能用于有限数量的数据,如果您发送敏感信息,它将显示在屏幕上并保存在网络服务器的日志中。 因此,如果您要发送密码等,请不要使用此方法。

使用method="post",数据作为请求发送,数据在请求正文中发送。 该方法没有限制,敏感信息在URL中不可见

sendreferer
  • true
  • false
如果设置为 true,浏览器将随请求一起发送当前卡片组的 URL。 如果可能,此 URL 将作为相对 URL 发送。 这样做的目的是允许服务器根据哪些卡组链接到它们来对卡组执行简单的访问控制。 例如,使用 HTTP,此属性在 HTTP Referer 标头中发送。
accept-charsetcharset_list指定以逗号或空格分隔的字符集列表,这些字符集可以对 POST 请求中发送到服务器的数据进行编码。 默认值为"未知(unknown)"。
classclass data设置元素的类名。
idelement ID元素的唯一 ID。

以下是显示 <go> 元素用法的示例。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="GO Element">
<p>
   <anchor>
       Chapter 2 : <go href="chapter2.wml"/>
   </anchor>
</p>
</card>
</wml>

另一个展示如何使用 Get 方法上传数据的示例

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="GO Element">
<p>
   <anchor>
      Using Get Method 
      <go href="chapter2.wml?x=17&y=42" method="get"/>
   </anchor>
</p>
</card>
</wml>

另一个示例展示如何使用 <setvar> 元素上传数据。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="GO Element">
<p>
   <anchor>
      Using setvar:
	  <go href="chapter2.wml"> 
	      <setvar name="x" value="17"/> 
  	      <setvar name="y" value="42"/> 
	  </go>
   </anchor>
</p>
</card>
</wml>

展示如何使用 <postfiled> 元素上传数据的另一个示例

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="GO Element">
<p>
   <anchor>
      Using setvar:
	  <go href="chapter2.wml" method="get"> 
              <postfield name="x" value="17"/>
              <postfield name="y" value="42"/>
	  </go>
   </anchor>
</p>
</card>
</wml>

<prev> 任务:

<prev> 任务表示返回到历史堆栈上之前访问过的卡片的操作。 执行此操作时,将从历史堆栈中删除顶部条目,并在 <prev> 任务中的任何 <setvar> 变量分配生效后再次显示该卡。

如果先前的 URL 不存在,则指定 <prev> 无效。

<prev> 元素支持以下属性:

属性描述
classclass data设置元素的类名。
idelement ID元素的唯一 ID。

以下是显示 <prev> 元素用法的示例。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="Prev Element">
<p>
   <anchor>
        Previous Page :<prev/>
   </anchor>
</p>
</card>
</wml>

在 <prev> 任务中包含变量可能很有用的一种情况是登录页面,它会提示输入用户名和密码。 在某些情况下,您可能希望在返回登录卡时清除密码字段,强制用户重新输入。 这可以通过诸如以下的构造来完成:

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="Prev Element">
<p>
   <anchor>
        <prev>
           <setvar name="password" value=""/>
        </prev>
   </anchor>
</p>
</card>
</wml>

<refresh> 任务:

<refresh> 任务是实际执行操作的最简单任务。 它的作用只是执行由 <setvar> 元素指定的变量赋值,然后用新值重新显示当前卡片。<go> 和 <prev> 任务在显示新卡片之前执行相同的操作。

<refresh> 任务最常用于在卡上执行某种"重置"操作。

<refresh> 元素支持以下属性:

属性描述
classclass data设置元素的类名。
idelement ID元素的唯一 ID。

以下是显示 <refresh> 元素用法的示例。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="Referesh Element">
<p>
   <anchor>
         Refresh this page:
          <go href="test.wml"/>
          <refresh>
            <setvar name="x" value="100"/>
          </refresh>
   </anchor>
</p>
</card>
</wml>

<noop> 任务:

<noop> 任务的目的是不执行任何操作(无操作)。

此任务的唯一真正用途是与模板相关

<noop> 元素支持以下属性:

属性描述
classclass data设置元素的类名。
idelement ID元素的唯一 ID。

以下是显示 <noop> 元素用法的示例。

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">

<wml>

<card title="Noop Element">
<p>
  <do type="prev" label="Back">
      <noop/>
  </do>
</p>
</card>
</wml>