任務(TASK)
<noop>
<prev>
<refresh>
<go>
前面我(wǒ)(wǒ)們已經講過如何在WML中(zhōng)顯示内容。不過任何程序員(yuán)都知(zhī)道,沒有結構和進程就沒有程序。在WML中(zhōng)定義進程有很多方法,最簡單的就是任務。
WAP1.1定義了幾種類型的任務,任務通過對事件(有關事件的詳細解釋見下(xià)一(yī)章事件)的響應改變程序的運行順序。有四種WML任務: <noop>、 <prev>、 <refresh>和 <go>。
<noop> [TOP]
這個任務不做任何事情,一(yī)般用于屏蔽DECK級事件(參見桌面和事件),語法非常簡單:
<noop/>
<prev> [TOP]
當用戶激活該任務時,終端就轉回上次用戶訪問過的URL。語法如下(xià):
<prev>
<setvar>
......
</prev>
如果<prev>中(zhōng)包含了<setvar>元素,就會優先處理。下(xià)面例子定義了一(yī)個隻有Back按鈕的的DECK,按下(xià)以後會返回前面看過頁面。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card>
<p>
<anchor>
Back
<prev/>
</anchor>
</p>
</card>
</wml>
<refresh> [TOP]
當用戶激活該任務時,就執行一(yī)個刷新過程。如果這個任務裏使用<setvar>定義了變量,變量值将被重新設置。語法如下(xià):
<prev>
<setvar>
......
</prev>
如果當前CARD含有<timer>元素,那麽在刷新時<timer>優先啓動。
下(xià)面的例子定義在屏幕刷新時重設firstname、lastname和age變量。
<do type="refresh">
<refresh>
<setvar name="firstname" value="david">
<setvar name="lastname" value="smith">
<setvar name="age" value="29">
</refresh>
</do>
<go> [TOP]
當用戶激活該任務時,就引導用戶去(qù)WML中(zhōng)指定URL,可以是服務器上其他的DECK,也可以是本DECK中(zhōng)其他的CARD。語法如下(xià):
<go
accept-charset="STRING"
href="URL"
method="post|get" sendreferer="true|false" >
<postfield>, <setvar>......
</go>
href:必選屬性,指向一(yī)個合法URL。如果是其他的DECK,則該DECK的第一(yī)個CARD會顯示出來。如果是本DECK中(zhōng)的其他CARD,而曆史堆棧裏保存的是最新數據的話(huà),則堆棧保持不變,直接調入該CARD。
sendreferer:如果爲true,用戶主體(tǐ)信息(USER AGENT)必須傳送給WAP網關。傳送時使用HTTP的提交頭信息,即盡可能簡短的相對URL。這個屬性可以用來給服務器控制存取URL的權力。默認值爲false。
Method:值必須爲get或post。分(fēn)别用來産生(shēng)HTTP的GET和POST請求。若爲get,則在URL中(zhōng)列出參數,例如:“http://www.wap86.net/bob.cgi?argone=one”;若爲post,則數據在請求内部傳送,不需要在URL中(zhōng)列出。
Accept-charset:指定字符集名稱列表,服務器在接受<go>的時候必須接受這個編碼規則。默認值爲unknown。具體(tǐ)内容這裏不作解釋,在以後的高級教程中(zhōng)描述。
下(xià)面是一(yī)個簡單的例子:
<go href="../topic.wml" sendreferer="true">
<postfield> [TOP]
<postfield>并不是一(yī)個任務,但是跟<go>任務有關,所以在這裏介紹。它用來定義“名稱/值”對以便通過<go>向服務器發送HTTP請求。語法如下(xià):
當用戶激活該任務時,就引導用戶去(qù)WML中(zhōng)指定URL,可以是服務器上其他的DECK,也可以是本DECK中(zhōng)其他的CARD。語法如下(xià):
下(xià)面是一(yī)個簡單的例子:
<postfield name="STRING" value="STRING" />
當一(yī)個含有<postfield>的任務被執行的時候,終端要完成這樣一(yī)個過程:
1、識别“名稱/值”對并準備參數變量;
2、參數變量轉換成正确的字符集;
3、根據URL的ESCAPE規則對參數進行ESCAPE轉碼,編譯成application/x-www-form-urlencoded的MIME類型;
4、根據method指定的請求模式提交任務。
下(xià)面的例子演示get模式的用法:
<go href="../news.asp" sendreferer="true" method="get">
<postfield name="newstype" value="technology"/>
<postfield name="newstext" value="wml"/>
</go>
服務器将收到這樣的get請求:
GET ../news.asp?newstype=technology&newstext=wml HTTP/1.1
.
. 其他HTTP頭信息
.
如果把前面的請求模式改成post,則同樣的<go>任務産生(shēng)的這樣的post請求:
POST../news.asp HTTP/1.1
content-type="xxx-urlencoded" .
. 其他HTTP頭信息
.
newstype=technology&newstext=wml
事件 (EVENT)
<anchor> 鏈接
<onevent> 固有事件
<timer> 計時器
<do> 用戶觸發事件
DECK級事件
任務不能在真空中(zhōng)生(shēng)存,它們必須綁定倒某個事件上才能做一(yī)些有用的事情。事件發生(shēng)--〉任務執行,這才是完整的進程控制。
有4個元素可以幫助你完成事件對任務的綁定:<anchor>、<onevent>、<timer>和<do>。
<anchor> 鏈接
象HTML一(yī)樣,WML也可以定義到其他程序的鏈接。在HTML中(zhōng),鏈接通常用下(xià)劃線和特殊顔色的方式表示跟其他内容的區别。在WAP終端上則沒有嚴格的規則說如何表示一(yī)個鏈接,一(yī)般采用反白(bái)的顯示方式。
<anchor>的語法如下(xià):
<anchor
title="STRING"
xml:lang="STRING"
>
<br>, <go>, <img>, <prev>, <refresh>, TEXT
</anchor>
title:鏈接的标題;
xml:lang:語言編碼。
在這種定義方式中(zhōng),實際上鏈接一(yī)般是通過<anchor>中(zhōng)包括的<go>元素完成的。比如下(xià)面的例子定義了2個CARD,點擊第一(yī)個CARD裏的“click me”鏈接會跳轉到第2個CARD:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http ://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
<card id="Hello" title="Hello">
<p>Hello,
<anchor>click me
<go href="#bye"/>
</anchor>
</p>
</card>
<card id="bye" title="Bye">
<p>Bye, guys</p>
</card>
</wml>
點擊前顯示: 點擊後顯示:
------- Hello -------
Hello,
-------- bye --------
Bye, guys
鏈接還有一(yī)種短格式,語法如下(xià):
<a
href="STRING"
title="STRING"
xml:lang="STRING"
>
<br>, <img>, TEXT
</a>
除了跟原來一(yī)樣的兩個屬性以外(wài),多了href屬性,可以對它直接指定URL。例如下(xià)面的例子定義了一(yī)個帶有圖像的鏈接:
<a title="HotBars" href="www.wap86.net/HotBars.wml">
<img src="hot.wbmp" alt="Hot Bars" />
</a>
除了跟原來一(yī)樣的兩個屬性以外(wài),多了href屬性,可以對它直接指定URL。
<onevent> 固有事件 [TOP]
WML定義了4種由用戶終端觸發的固有事件:
oneventforward:當用戶被<go>任務或其他機制(如一(yī)個SCRIPT過程)引導到一(yī)個CARD時觸發;
oneventbackward:當用回被<prev>或其他機制(如在設備上按BACK按鈕)引導到一(yī)個CARD時觸發;
ontimer:當TIMER計時結束時觸發。定義TIMER計時器可以使用<timer>元素,見下(xià)一(yī)節;
onpick:當用戶按下(xià)一(yī)個<option>選項時觸發(可以是選中(zhōng)或取消選擇)。
把這些事件綁定到一(yī)個任務要使用<onevent>元素,它的語法如下(xià):
<onevent
type="oneventforward | oneventbackward | ontimer | onpick"
>
<go>, <noop>, <prev>, <refresh>
</onevent>
下(xià)面的例子演示了如何使用固有事件在CARD調入時清空變量。
<?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="card1">
<onevent type="oneventforward">
<refresh>
<setvar name="firstname" value=""/>
<setvar name="lastname" value=""/>
</refresh>
</onevent>
<p>
You have no name!
</p>
</card>
</wml>
<timer> 計時器 [TOP]
看名字就知(zhī)道,這是個計時器,它在經過規定的計時時間以後産生(shēng)一(yī)個任務。<timer>計時器隻在所屬CARD裏有效:當進入CARD時,計時器開(kāi)始工(gōng)作;時間一(yī)到,觸發任務;如果離(lí)開(kāi)CARD,計時器停止。語法如下(xià):
<timer
name="STRING"
value="NUMBER"
/>
name:可選。指定一(yī)個包含計時時間的變量,在計時器開(kāi)始工(gōng)作以後,變量的值會逐漸減少。如果這個變量在<timer>之前就已經存在并且賦值爲一(yī)個非負整數,那後面value屬性的值會被忽略,直接使用變量裏的值作爲計時時限。
value:必選。指定計時時間,以1/10秒爲單位。
下(xià)面的例子每隔1秒顯示不同的文字(當然,你有興趣改成圖像也可以)。
<?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="Hello" title="Hello">
<onevent type="ontimer">
<go href="#card2">
</onevnet>
<timer value="10"/>
<p>Hello!</p>
</card>
<card id="Take care">
<onevent type="ontimer" title="Take care">
<go href="#card3">
</onevnet>
<timer value="10"/>
<p>R U tired?</p>
</card>
<card id="Rest">
<onevent type="ontimer" title="Rest">
<go href="#card1">
</onevnet>
<timer value="10"/>
<p>Take a rest!</p>
</card>
</wml>
顯示結果如下(xià),注意會不斷循環。 Sport選擇:
第1秒 第2秒 第3秒
------ Hello ------
Hello!
----- Take care ----
R U tired?
------- Rest -------
Take a rest!
還有一(yī)個例子,通常用來做網站封面,顯示一(yī)段歡迎詞以後進入正式内容。這裏沒有使用圖片,各位可以自己加上試試看。
<?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="Welcome to WAP86" ontimer="wap86.wml">
<timer value="30"/>
<p>
Hello!
Welcome to WAP86 - the paradise of WML developers.
</p>
</card>
</wml>
部件 功能
accept 确認,接受輸入
prev 退回曆史頁面訪問堆棧裏上一(yī)個CARD
help 上下(xià)文關聯的幫助信息
reset 重設設備狀态
options 上下(xià)文關聯的選項或附加操作
delete 删除當前内容或選擇
unknown 由開(kāi)發者自己定義
<do> 用戶觸發事件 [TOP]
每個WAP終端都預定義了一(yī)系列用戶界面部件,如手機上的按鈕、觸摸屏上的圖表、聲音指令或者其他一(yī)些很容易是别的部件。WML1.1定義了右面那些WAP兼容終端必須支持的部件。但是要說明的是,隻有prev有預先定義的功能,其他的隻是概念上的定義,需要根據開(kāi)發者激活并賦予一(yī)定的動作。
當用戶激活這些部件的時候會産生(shēng)相應的事件。你可以使用<do>元素捕獲這些事件并對其做出反應。下(xià)面是<do>的語法:
<do
type="accept | prev | help | reset | options | delete | unknown"
lebel="STRING"
name="STRING"
optional="true | false"
xml:lang="STRING"
>
<go> | <noop> | <prev> | <refresh>
</do>
type:必選屬性,内容隻能是那7種;
label:用戶接口部件的顯示标簽。如果終端不能顯示則被忽略。WML1.1建議此屬性長度限制在6個英文字符以内;
name:标志(zhì)“事件/任務”綁定關系的唯一(yī)名稱(在CARD範圍内)。CARD級的<do>事件替換同名的DECK級<do>事件(見下(xià)一(yī)節)。如果不指定name屬性或name爲空字符串,則name默認爲type的類型;
optional:告訴終端此軟按鈕在屏幕中(zhōng)是否顯示。如果此值設爲true,則忽略本<do>元素。默認值爲false;
xml:lang任務:語言代碼。
跟其他“事件/任務”綁定關系一(yī)樣,<do>裏的任務定義必須是<go>、<noop>、<prev>或<refresh>中(zhōng)的一(yī)個。
下(xià)面例子演示了<do>的使用方法。用戶按了不同的按鈕會被導向不同的CARD。
<?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="Card1" title="WAP86 Links">
<do type="accept" label="Links" optional="false">
<go href="#Links"/>
</do>
<do type="help" label="Help" optional="false">
<go href="#Help"/>
</do>
<p> WAP86's perfect links</p>
</card>
<card id="Links" title="WAP86 Links">
<p> Select one:<br><br>
<a href="www.wap86.net">WAP86</a><br>
<a href="www.at86.com">AT86</a>
</p>
</card>
<card id="help" title="Help">
<do type="accept" label="Links" optional="false">
<go href="#Links"/>
</do>
<p>
Select "Links" button to view the links.
</p>
</card>
</wml>
顯示結果
主畫面: 按下(xià)“Links”按鈕以後: 按下(xià)“Help”按鈕以後:
---- WAP86 Links ---
WAP86's perfect links
Links Help
---- WAP86 Links ---
Select one:
>[ WAP86 ]
[ AT86 ]
------- Help -------
Select "Links" button to view the links.
Links
DECK級事件 [TOP]
前面(DECK一(yī)節,關于<template>)已經講過可以用<template>元素定義DECK級事件,做法跟CARD級事件一(yī)樣,隻要在<template>元素裏包含<do>或<onevent>事件就可以。這種做法可以定義一(yī)些在每個CARD裏都需要定義的事件,而不需要重複說明。比如下(xià)面的例子給所有的CARD定義了BACK按鈕以便返回上一(yī)頁:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<template>
<do type="prev" label="BACK" optional="false">
<prev/>
</do>
</template>
<card id="Links" title="WAP86 Links">
<do type="help" label="Help" optional="false">
<go href="#Help"/>
</do>
<p> Select one:<br><br>
<a href="www.wap86.net">WAP86</a><br>
<a href="www.at86.com">AT86</a>
</p>
</card>
<card id="help" title="Help">
<do type="accept" label="Links" optional="false">
<go href="#Links"/>
</do>
<p>
Select "Links" button to view the links.
</p>
</card>
</wml>
<noop>
<prev>
<refresh>
<go>
前面我(wǒ)(wǒ)們已經講過如何在WML中(zhōng)顯示内容。不過任何程序員(yuán)都知(zhī)道,沒有結構和進程就沒有程序。在WML中(zhōng)定義進程有很多方法,最簡單的就是任務。
WAP1.1定義了幾種類型的任務,任務通過對事件(有關事件的詳細解釋見下(xià)一(yī)章事件)的響應改變程序的運行順序。有四種WML任務: <noop>、 <prev>、 <refresh>和 <go>。
<noop> [TOP]
這個任務不做任何事情,一(yī)般用于屏蔽DECK級事件(參見桌面和事件),語法非常簡單:
<noop/>
<prev> [TOP]
當用戶激活該任務時,終端就轉回上次用戶訪問過的URL。語法如下(xià):
<prev>
<setvar>
......
</prev>
如果<prev>中(zhōng)包含了<setvar>元素,就會優先處理。下(xià)面例子定義了一(yī)個隻有Back按鈕的的DECK,按下(xià)以後會返回前面看過頁面。
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card>
<p>
<anchor>
Back
<prev/>
</anchor>
</p>
</card>
</wml>
<refresh> [TOP]
當用戶激活該任務時,就執行一(yī)個刷新過程。如果這個任務裏使用<setvar>定義了變量,變量值将被重新設置。語法如下(xià):
<prev>
<setvar>
......
</prev>
如果當前CARD含有<timer>元素,那麽在刷新時<timer>優先啓動。
下(xià)面的例子定義在屏幕刷新時重設firstname、lastname和age變量。
<do type="refresh">
<refresh>
<setvar name="firstname" value="david">
<setvar name="lastname" value="smith">
<setvar name="age" value="29">
</refresh>
</do>
<go> [TOP]
當用戶激活該任務時,就引導用戶去(qù)WML中(zhōng)指定URL,可以是服務器上其他的DECK,也可以是本DECK中(zhōng)其他的CARD。語法如下(xià):
<go
accept-charset="STRING"
href="URL"
method="post|get" sendreferer="true|false" >
<postfield>, <setvar>......
</go>
href:必選屬性,指向一(yī)個合法URL。如果是其他的DECK,則該DECK的第一(yī)個CARD會顯示出來。如果是本DECK中(zhōng)的其他CARD,而曆史堆棧裏保存的是最新數據的話(huà),則堆棧保持不變,直接調入該CARD。
sendreferer:如果爲true,用戶主體(tǐ)信息(USER AGENT)必須傳送給WAP網關。傳送時使用HTTP的提交頭信息,即盡可能簡短的相對URL。這個屬性可以用來給服務器控制存取URL的權力。默認值爲false。
Method:值必須爲get或post。分(fēn)别用來産生(shēng)HTTP的GET和POST請求。若爲get,則在URL中(zhōng)列出參數,例如:“http://www.wap86.net/bob.cgi?argone=one”;若爲post,則數據在請求内部傳送,不需要在URL中(zhōng)列出。
Accept-charset:指定字符集名稱列表,服務器在接受<go>的時候必須接受這個編碼規則。默認值爲unknown。具體(tǐ)内容這裏不作解釋,在以後的高級教程中(zhōng)描述。
下(xià)面是一(yī)個簡單的例子:
<go href="../topic.wml" sendreferer="true">
<postfield> [TOP]
<postfield>并不是一(yī)個任務,但是跟<go>任務有關,所以在這裏介紹。它用來定義“名稱/值”對以便通過<go>向服務器發送HTTP請求。語法如下(xià):
當用戶激活該任務時,就引導用戶去(qù)WML中(zhōng)指定URL,可以是服務器上其他的DECK,也可以是本DECK中(zhōng)其他的CARD。語法如下(xià):
下(xià)面是一(yī)個簡單的例子:
<postfield name="STRING" value="STRING" />
當一(yī)個含有<postfield>的任務被執行的時候,終端要完成這樣一(yī)個過程:
1、識别“名稱/值”對并準備參數變量;
2、參數變量轉換成正确的字符集;
3、根據URL的ESCAPE規則對參數進行ESCAPE轉碼,編譯成application/x-www-form-urlencoded的MIME類型;
4、根據method指定的請求模式提交任務。
下(xià)面的例子演示get模式的用法:
<go href="../news.asp" sendreferer="true" method="get">
<postfield name="newstype" value="technology"/>
<postfield name="newstext" value="wml"/>
</go>
服務器将收到這樣的get請求:
GET ../news.asp?newstype=technology&newstext=wml HTTP/1.1
.
. 其他HTTP頭信息
.
如果把前面的請求模式改成post,則同樣的<go>任務産生(shēng)的這樣的post請求:
POST../news.asp HTTP/1.1
content-type="xxx-urlencoded" .
. 其他HTTP頭信息
.
newstype=technology&newstext=wml
事件 (EVENT)
<anchor> 鏈接
<onevent> 固有事件
<timer> 計時器
<do> 用戶觸發事件
DECK級事件
任務不能在真空中(zhōng)生(shēng)存,它們必須綁定倒某個事件上才能做一(yī)些有用的事情。事件發生(shēng)--〉任務執行,這才是完整的進程控制。
有4個元素可以幫助你完成事件對任務的綁定:<anchor>、<onevent>、<timer>和<do>。
<anchor> 鏈接
象HTML一(yī)樣,WML也可以定義到其他程序的鏈接。在HTML中(zhōng),鏈接通常用下(xià)劃線和特殊顔色的方式表示跟其他内容的區别。在WAP終端上則沒有嚴格的規則說如何表示一(yī)個鏈接,一(yī)般采用反白(bái)的顯示方式。
<anchor>的語法如下(xià):
<anchor
title="STRING"
xml:lang="STRING"
>
<br>, <go>, <img>, <prev>, <refresh>, TEXT
</anchor>
title:鏈接的标題;
xml:lang:語言編碼。
在這種定義方式中(zhōng),實際上鏈接一(yī)般是通過<anchor>中(zhōng)包括的<go>元素完成的。比如下(xià)面的例子定義了2個CARD,點擊第一(yī)個CARD裏的“click me”鏈接會跳轉到第2個CARD:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http ://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
<card id="Hello" title="Hello">
<p>Hello,
<anchor>click me
<go href="#bye"/>
</anchor>
</p>
</card>
<card id="bye" title="Bye">
<p>Bye, guys</p>
</card>
</wml>
點擊前顯示: 點擊後顯示:
------- Hello -------
Hello,
-------- bye --------
Bye, guys
鏈接還有一(yī)種短格式,語法如下(xià):
<a
href="STRING"
title="STRING"
xml:lang="STRING"
>
<br>, <img>, TEXT
</a>
除了跟原來一(yī)樣的兩個屬性以外(wài),多了href屬性,可以對它直接指定URL。例如下(xià)面的例子定義了一(yī)個帶有圖像的鏈接:
<a title="HotBars" href="www.wap86.net/HotBars.wml">
<img src="hot.wbmp" alt="Hot Bars" />
</a>
除了跟原來一(yī)樣的兩個屬性以外(wài),多了href屬性,可以對它直接指定URL。
<onevent> 固有事件 [TOP]
WML定義了4種由用戶終端觸發的固有事件:
oneventforward:當用戶被<go>任務或其他機制(如一(yī)個SCRIPT過程)引導到一(yī)個CARD時觸發;
oneventbackward:當用回被<prev>或其他機制(如在設備上按BACK按鈕)引導到一(yī)個CARD時觸發;
ontimer:當TIMER計時結束時觸發。定義TIMER計時器可以使用<timer>元素,見下(xià)一(yī)節;
onpick:當用戶按下(xià)一(yī)個<option>選項時觸發(可以是選中(zhōng)或取消選擇)。
把這些事件綁定到一(yī)個任務要使用<onevent>元素,它的語法如下(xià):
<onevent
type="oneventforward | oneventbackward | ontimer | onpick"
>
<go>, <noop>, <prev>, <refresh>
</onevent>
下(xià)面的例子演示了如何使用固有事件在CARD調入時清空變量。
<?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="card1">
<onevent type="oneventforward">
<refresh>
<setvar name="firstname" value=""/>
<setvar name="lastname" value=""/>
</refresh>
</onevent>
<p>
You have no name!
</p>
</card>
</wml>
<timer> 計時器 [TOP]
看名字就知(zhī)道,這是個計時器,它在經過規定的計時時間以後産生(shēng)一(yī)個任務。<timer>計時器隻在所屬CARD裏有效:當進入CARD時,計時器開(kāi)始工(gōng)作;時間一(yī)到,觸發任務;如果離(lí)開(kāi)CARD,計時器停止。語法如下(xià):
<timer
name="STRING"
value="NUMBER"
/>
name:可選。指定一(yī)個包含計時時間的變量,在計時器開(kāi)始工(gōng)作以後,變量的值會逐漸減少。如果這個變量在<timer>之前就已經存在并且賦值爲一(yī)個非負整數,那後面value屬性的值會被忽略,直接使用變量裏的值作爲計時時限。
value:必選。指定計時時間,以1/10秒爲單位。
下(xià)面的例子每隔1秒顯示不同的文字(當然,你有興趣改成圖像也可以)。
<?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="Hello" title="Hello">
<onevent type="ontimer">
<go href="#card2">
</onevnet>
<timer value="10"/>
<p>Hello!</p>
</card>
<card id="Take care">
<onevent type="ontimer" title="Take care">
<go href="#card3">
</onevnet>
<timer value="10"/>
<p>R U tired?</p>
</card>
<card id="Rest">
<onevent type="ontimer" title="Rest">
<go href="#card1">
</onevnet>
<timer value="10"/>
<p>Take a rest!</p>
</card>
</wml>
顯示結果如下(xià),注意會不斷循環。 Sport選擇:
第1秒 第2秒 第3秒
------ Hello ------
Hello!
----- Take care ----
R U tired?
------- Rest -------
Take a rest!
還有一(yī)個例子,通常用來做網站封面,顯示一(yī)段歡迎詞以後進入正式内容。這裏沒有使用圖片,各位可以自己加上試試看。
<?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="Welcome to WAP86" ontimer="wap86.wml">
<timer value="30"/>
<p>
Hello!
Welcome to WAP86 - the paradise of WML developers.
</p>
</card>
</wml>
部件 功能
accept 确認,接受輸入
prev 退回曆史頁面訪問堆棧裏上一(yī)個CARD
help 上下(xià)文關聯的幫助信息
reset 重設設備狀态
options 上下(xià)文關聯的選項或附加操作
delete 删除當前内容或選擇
unknown 由開(kāi)發者自己定義
<do> 用戶觸發事件 [TOP]
每個WAP終端都預定義了一(yī)系列用戶界面部件,如手機上的按鈕、觸摸屏上的圖表、聲音指令或者其他一(yī)些很容易是别的部件。WML1.1定義了右面那些WAP兼容終端必須支持的部件。但是要說明的是,隻有prev有預先定義的功能,其他的隻是概念上的定義,需要根據開(kāi)發者激活并賦予一(yī)定的動作。
當用戶激活這些部件的時候會産生(shēng)相應的事件。你可以使用<do>元素捕獲這些事件并對其做出反應。下(xià)面是<do>的語法:
<do
type="accept | prev | help | reset | options | delete | unknown"
lebel="STRING"
name="STRING"
optional="true | false"
xml:lang="STRING"
>
<go> | <noop> | <prev> | <refresh>
</do>
type:必選屬性,内容隻能是那7種;
label:用戶接口部件的顯示标簽。如果終端不能顯示則被忽略。WML1.1建議此屬性長度限制在6個英文字符以内;
name:标志(zhì)“事件/任務”綁定關系的唯一(yī)名稱(在CARD範圍内)。CARD級的<do>事件替換同名的DECK級<do>事件(見下(xià)一(yī)節)。如果不指定name屬性或name爲空字符串,則name默認爲type的類型;
optional:告訴終端此軟按鈕在屏幕中(zhōng)是否顯示。如果此值設爲true,則忽略本<do>元素。默認值爲false;
xml:lang任務:語言代碼。
跟其他“事件/任務”綁定關系一(yī)樣,<do>裏的任務定義必須是<go>、<noop>、<prev>或<refresh>中(zhōng)的一(yī)個。
下(xià)面例子演示了<do>的使用方法。用戶按了不同的按鈕會被導向不同的CARD。
<?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="Card1" title="WAP86 Links">
<do type="accept" label="Links" optional="false">
<go href="#Links"/>
</do>
<do type="help" label="Help" optional="false">
<go href="#Help"/>
</do>
<p> WAP86's perfect links</p>
</card>
<card id="Links" title="WAP86 Links">
<p> Select one:<br><br>
<a href="www.wap86.net">WAP86</a><br>
<a href="www.at86.com">AT86</a>
</p>
</card>
<card id="help" title="Help">
<do type="accept" label="Links" optional="false">
<go href="#Links"/>
</do>
<p>
Select "Links" button to view the links.
</p>
</card>
</wml>
顯示結果
主畫面: 按下(xià)“Links”按鈕以後: 按下(xià)“Help”按鈕以後:
---- WAP86 Links ---
WAP86's perfect links
Links Help
---- WAP86 Links ---
Select one:
>[ WAP86 ]
[ AT86 ]
------- Help -------
Select "Links" button to view the links.
Links
DECK級事件 [TOP]
前面(DECK一(yī)節,關于<template>)已經講過可以用<template>元素定義DECK級事件,做法跟CARD級事件一(yī)樣,隻要在<template>元素裏包含<do>或<onevent>事件就可以。這種做法可以定義一(yī)些在每個CARD裏都需要定義的事件,而不需要重複說明。比如下(xià)面的例子給所有的CARD定義了BACK按鈕以便返回上一(yī)頁:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<template>
<do type="prev" label="BACK" optional="false">
<prev/>
</do>
</template>
<card id="Links" title="WAP86 Links">
<do type="help" label="Help" optional="false">
<go href="#Help"/>
</do>
<p> Select one:<br><br>
<a href="www.wap86.net">WAP86</a><br>
<a href="www.at86.com">AT86</a>
</p>
</card>
<card id="help" title="Help">
<do type="accept" label="Links" optional="false">
<go href="#Links"/>
</do>
<p>
Select "Links" button to view the links.
</p>
</card>
</wml>
文章來源:http://www.host01.com/article/Wap/wap001/0592216285398005.htm