非常不错的WAP常见问题问答大全(二)第2/3页
更新时间:2007年03月14日 00:00:00 作者:
12. 什么是一个“deck”?
一个WML文档有许多卡片(cards)组成。一个卡片是一系列完整的WML代码。这些卡片被称为一个“deck”。卡片和“deck”的概念就有点像HTML中的锚标记<a name="#achor1">和一个HTML页面。也就是说卡片是“deck”中的一个组成部分。也可以把“deck”称为WML中的页面。它们之间的关系可以比做一副扑克牌。整副扑克牌就是deck,而每一张牌就是card。
13. 什么是WML的“deck”?
WML的“deck”或者WML文件是指decks。每个deck包含一个或者更多的card。每个deck都以<wml>开始和结束。并且每个card都以<card>开头或者结束。
当WML微型浏览器处理WML文件或者deck的时候,它阅读整个deck,并且在deck内的各个card之间进行导航。当装入deck的时候,deck里面所有的card都已经装入到内存中,直到浏览器装入另外的deck。
如果熟悉 HTML中的<a name>标签。WML的<card>标签将是非常类似的:
<wml>
<card id="start_menu">
...some code...
</card>
<card id="purchase">
...some more code...
</card>
</wml>
deck和card可以按照这种方式调用:[deckname][#cardname]。如果deckname省略,那么浏览器就会查找当前内存里的cardname名字的card。如果使用了deckname和#cardname,那么浏览器将装入deckname的整个deck,然后跳入到#cardname。这个和HTML的工作方式很像。
14. WML是大小写敏感的吗?
是的!要注意WAP 1.1使用小写的标签。
15. 如何显示一个美元符号?
使用两个在一起的美元符号来表示,即“$$”。
16. 想显示价格的格式该怎么办?
“$”是一个特殊的字符,使用“$$”来显示一个“$”。
例如:
<p>
The price is $$11.20
</p>
17. fieldset标签有什么作用?
编写WML页面的时候要考虑到设备的屏幕很小。如果试图想把一个大的form在一个屏幕里面显示,就要指定那些标签保持在一个屏幕中。那么fieldset标签将这些标签捆绑在一个屏幕上。
18. postfield标签有什么作用?
postfield标签使允许提交参数到服务器端。注意有些早期的模拟器还不支持该标签,这将给开发工作带来麻烦!
19. WML有类似HTML的<mailto>标签吗?
没有。但是你可以使用WML表单和服务端脚本来得到同样的效果。
20. 无法让<input/>格式正常工作是怎么回事?
至少Nokia WML Reference没有讲清楚有关<input/>标签的用法。format参数控制着用户输入数据的类型和长度。
注意到不是所有的WAP 1.1浏览器都接受所有的格式化代码。例如:Nokia 7110就支持得不是很好。Mitsubishi Trium在处理“*f”代码的时候有点问题,“*”必须为1或者更大。专门的格式化代码如下:
A
从A到Z的任何大写字母,没有数字或其他字符。
a
从a到z的任何小写字母,没有数字和其他字符。
任何0到9的数字。
X
从A到Z从0到9的任何字符。
x
从a到z从0到9的任何字符。
M
任何字符,输入默认从大写开始。
m
任何字符,输入默认从小写开始。
*f
(星号)意味着任何数字(包括0),f是格式的代码。
nf
意味着恰好要输入的字符个数。n从1到9。f是格式代码。
\
是转义输出字符。
格式化字符可以组合使用来表示一种特定的格式输入。但是强制一定的输入应当避免在用户出错的时候没有提示信息。如果输入是不正确的,该填写的区域一般仍保持空白,直到让用户知道应该输入什么。如果只想输入数字,使用“*N”那么将直接转跳到数字输入模式。如果只想输入大写的字符,使用“*M”转跳到大写输入模式。现举一些例子:
“N” 只接受一个数字字符。
“*N” 接受任何数字字符。
“NN” 只接受2个数字字符,不多不少。
“ANN” 接受一个大写字符(没有数字),后面跟着两个数字,不多不少。
“X*N” 表示可以接受一个字符(没有数字)后面跟着任意多的数字字符。
“NNN\-NNN\-NNNN”表示接受美国的电话号码格式,例如:“123-456-1234”。
“2N\:2N\:2N” 表示接受时间格式,例如:“12:02:34”。
“NNNNNNNNN” 表示接受9个数字字符。
“9N” 同样表示接受9个数字字符。
maxlength参数控制着输入字符的总个数。
21. 如何防止一个空的field?
在大多数情况下需要知道用户确实是输入了一些内容在field中,不能让这些内容为空。这个可以通过在服务端的检测来完成,也可以通过WML来完成。
在WML中,这个检查可以通过合适的格式化代码来完成,或者使用一个在input标签中叫做emptyok="false" 的参数来实现(只有当必须要求用户输入的时候才使用)。如果使用了value="something" 或者value="" 用户仍然可以发送空的fields。
以下的行将接收任何值到username field, 甚至用户将整个field清空。另外field中没有任何东西,也能够提交form。
<input name="username" type="text" value="things" format="*M"/>
除了用户将整个field清空,以下的行将接收任何值到username field。如果field是空的,他将不能提交form,。
<input name="username" type="text" value="things" format="M*m"/>
以上的应用是针对大多数的浏览器。在Nokia 7110 ,emptyok参数可以有同样的效果:
<input name="username" type="text" value="things" format="*M" emptyok="false"/>
22. 使用option标签的时候,无法一屏显示完该怎么办?
许多WAP电话的显示屏幕只能显示三到四个选项。按以下的方法分割option字段就可以输入更多的选项。
<select title="longselectlist">
<optgroup title="option1">
<option>option1-1</option>
<option>option1-2</option>
<option>option1-3</option>
</optgroup>
<optgroup title="option2">
<option>option2-1</option>
<option>option2-2</option>
<option>option2-3</option>
</optgroup>
<optgroup title="option3">
<option>option3-1</option>
<option>option3-2</option>
<option>option3-3</option>
</optgroup>
</select>
23. 想有一个永久的BACK在屏幕的右下方。有些好像是自动的,若没有,该怎么做?
可以加入以下代码。
<do type="prev" label="Back">
</prev>
</do>
更好的是使用template。
……
<template>
<do type="prev" label="Back" name="back">
</prev>
</do>
</template>
……
24. WAP支持列表吗?
是的,WAP1.1支持列表和相关的标记。
25. 可以在WML中使用表单吗?
可以。但是Nokia 7110在显示表单的时候有些问题。
26. WML支持什么样的表单提交方式?
WML支持GET和POST方式。但是Nokia 7110在处理GET方式的时候有些问题。
27. WML中如何增加参数到URL字符串中?
和HTML的工作方式很像,如下所示:
……
www.someserver.com/someurl?parameter1=value1¶meter2=value2
……
唯一的不同是将“&”变成“&”。
28. 如何从WML向ASP传送数据?
假设有一个ASP叫做“myasp.asp”,并且有一个WML变量叫做 “wmlvar”。当发出请求“myasp.asp?wmlvar=something”,可以使用下面的方法得到变量的内容。
dim aspvar
aspvar = Request.QueryString("wmlvar")
ASP变量“aspvar”将包含字符串“something”。当然ASP变量也可以与WML变量同名。
29. 如何让WML页面自己更新?
有过Web经验的人喜欢使用:
<meta http-equiv="refresh" content="1;http://somewhere.com/">
来强制浏览器自动更新。
虽然在WAP中也支持一些META标签,一个更好的办法是使用<ontimer>标签。
以下的代码显示了如何自动转跳到另外一个卡片:nextdeck.wml。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="splashscreen" ontimer="nextcard.wml">
<timer value="40"/>
<p>Please wait for the timer to run out...</p>
</card>
</wml>
下面的代码将强制浏览器在一段时间后重新装入同一个卡片。这个页面叫做loop.wml。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="loop" ontimer="loop.wml">
<timer value="40"/>
<p>This text will be shown over and over again...</p>
</card>
</wml>
注意必须避免浏览器可能要使用的cache机制。
最新评论