WAP常见问题问答大全4

来源:互联网 发布:soliworks 看图软件 编辑:程序博客网 时间:2024/04/30 22:25

11. WML的一般语法是什么?

    WML非常像XML。和HTML相比其语法规则更加严格,从而保证当微型浏览器解析和解释的时候不会有太多的错误信息。
   
HTML一样,WML使用“<”“>”组成的格式化标签。许多标签都是以<tag>开头,以</tag>结尾。在开头或者结尾中包含的部分叫做元素。有些标签叫做空元素,只有标签,没有内容,如:<tag/>
   
许多元素有属性来描述应其中还有那些内容。属性名字必须小写,并且属性值必须使用双引号括起来。有些属性是必须的,有些是可选的。一般的属性标签格式就像:<tag attribute1="value">
   
变量可以在WML卡片中定义,它们的一般格式是  $(variablename)
   
一个WML页面有一个专门的格式,它必须以XML的文档声明为开头:

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

    所有的页面中的元素,都必须在<wml></wml>标签之间。

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>

    deckcard可以按照这种方式调用:[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

AZ的任何大写字母,没有数字或其他字符。

a

az的任何小写字母,没有数字和其他字符。

N

任何09的数字。

X

AZ09的任何字符。

x

az09的任何字符。

M

任何字符,输入默认从大写开始。

m

任何字符,输入默认从小写开始。

*f

(星号)意味着任何数字(包括0),f是格式的代码。

nf

意味着恰好要输入的字符个数。n19f是格式代码。

是转义输出字符。

    格式化字符可以组合使用来表示一种特定的格式输入。但是强制一定的输入应当避免在用户出错的时候没有提示信息。如果输入是不正确的,该填写的区域一般仍保持空白,直到让用户知道应该输入什么。如果只想输入数字,使用“*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支持GETPOST方式。但是Nokia 7110在处理GET方式的时候有些问题。

27. WML中如何增加参数到URL字符串中?

    HTML的工作方式很像,如下所示:

……
www.someserver.com/someurl?parameter1=value1&parameter2=value2
……

    唯一的不同是将“&”变成“&”

28. 如何从WMLASP传送数据?

    假设有一个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机制。

30. WML页面的最大大小是多少?

    1397 bytes/deck

 
原创粉丝点击