WAP(wml)開發教程

WAP(無線應用協議)是在數字移動電話、因特網或其他個人數字助理機(PDA)、計算機應用之間進行通訊的開放全球標準。 它是由一系列協議組成,用來標準化無線通信設備,可用於Internet訪問,包括收發電子郵件,訪問WAP網站上的頁面等等。

WAP將移動網絡和Internet以及公司的局域網緊密地聯繫起來.提供一種與網絡類型、運行商和終端設備都獨立的移動增值業務。

通過這種技術,無論你在何地、何時只要你需要信息,你就可以打開你的WAP手機,享受無窮無盡的網上信息或者網上資源。如:綜合新聞、天氣預報、股市動態、商業報道、當前匯率等。電子商務、網上銀行也將逐一實現。你還可以隨時隨地獲得體育比賽結果、娛樂圈趣聞以及幽默故事,爲生活增添情趣,也可以利用網上預定功能,把生活安排的有條不紊。

WAP協議包括以下幾層:
1、Wireless Application Environment (WAE)
2、Wireless Session Layer (WSL)
3、Wireless Transaction Layer (WTP)
4、Wireless Transport Layer Security (WTLS)
5、Wireless Transport Layer (WDP)

其中,WAE層含有微型瀏覽器、WML 、WMLSCRIPT的解釋器等等功能。WTLS層爲無線電子商務及無線加密傳輸數據時提供安全方面的基本功能。

WAP協議的誕生是WAP論壇成員多年努力的結果。它是針對不同的協議層定義了一系列協議,這些協議使得各方面的廠商和公司可以協同工作,開發無線通信網絡的應用。目前有超過100個成員加入WAP論壇,包括有終端和基礎設備的製造商,有移動通信的網絡運營商,有業務提供商,有軟件公司,也有網絡內容提供商等,共同爲移動設備開發服務和應用。

但是,目前由於無線網的帶寬等等因素的限制,WAP手機的在多媒體上的應用如:可視會議、多媒體教學等等,還須一段時日。

WAP規範還在不斷地完善,WAP論壇成員們在加緊開發功能完善的WAP設備,這無疑加快其在無線因特網綜合服務領域的擴展速度。

關於WAP有幾點,應該注意一下:
1)WAP不只是將手機帶入IP/Internet網絡
WAP規範考慮了很多無線網絡和手機的特性。即便是3G的手機也無法把屏幕做的象通用計算機一樣,來瀏覽HTML頁面。直接接入IP網,9110在98年就可以,但是應用呢,不可能Nokia, Motarola, Ericsson推出手機時各自定義一套應用。
象WWW一樣,在規範推出以前,已經有了很多基於IP網絡的應用,包括一些做的很好的軟件。但Internet遍地開花卻是在WWW規範推出之後。WAP很大的意義在於統一的標準。
WAP和無線IP網絡並不矛盾,WAP協議規定,若承載基於IP,WDP就是UDP。等無線IP網絡普及,若認爲上面幾層太繁瑣,最多是WAP協議中間幾層略掉(其實也沒太多東西)。

2) WAP應用模式很多
只要手機和網絡支持統一標準,業務發展是不可限量的。這一點就不多說了。

3) WAP是發展的

WAP規範不僅定義了和Internet結合部分,還定義WTE,及話音部分,可以說發展還早呢。要是以後通訊核心網建起來,話音業務沒準都採用WAP來實現。

WML學習(一)
概述
WML(Wireless Markup Language - 無線標記語言)這種描述語言同我們常聽說的HTML語言同出一家,都屬於X ML語言這一大家族。HTML語言寫出的內容,我們可以在我們的PC機上用IE或是Netscape等瀏覽器進行閱讀,而 WML語言寫出的文件則是專門用來在手機等的一些無線終端顯示屏上顯示,供人們閱讀的,並且同樣也可以向使用者提供人機交互界面,接受使用者輸入的查詢等信息,然後向使用者返回他所想要獲得的最終信息。

基本規則
WML使用XML文檔字符集,目前支持 Unicode 2.0,和HDML不同, WML的所有標籤,屬性和規定的可接收值必須小寫,CARD的名字和變量也是區分大小寫的。和HDML一樣,對於連續的空字符,只顯示一個空格。標籤內屬性的值必須用"或者'括起來,屬性名,=和值之間不能有空格。對於不成對出現的標籤,必須在 > 前加 / ,比如<br/>。在對變量的引用上和HDML基本相同,有:
$(var1:esc)
$(var1:noesc)
$(var1:unesc)

三種形式,具體含義參見前面HDML的相關部分。在對保留字符的處理上也基本相同,對應的取代字符有:

  < <

  > >

  ' &apos;

  " "

  & &

  $ $$

  空格  

  - -

這裏要指出的是在URL的傳遞過程中,用來連接參數的 & 必須轉化爲 & 。



WML學習(二)

基本格式和文件頭
wml文件的一般格式:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
 <head>
  <access/>
  <meta..../>
 </head>
 <card>
  Some contents...
 </card>
<wml>

  結構看上去和HTMl文件很類似,對於每一個DECK,在其文檔開頭必須指明以下的類型聲明:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD
WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">

千萬注意字母的大小寫。對於一個DECK,其文件大小最好不要超過1.2K。
  <wml>標籤和HTML中的<html>標籤一樣,用來表明這是一個 WML的DECK,它有一個可選的xml:lang屬性來制定文檔的語言,比如<wml xml:lang="zh">表示文檔語言爲中文。 和HTML一樣<head>標籤包含了該DESK的相關信息。<head> 標籤之間可以包含一個<access>標籤和多個<meta>標籤。 <access domain="域" path="/路徑" />相當於HTML中的<BASE>標籤,指定該DECK的訪問控制信息,它用兩個可選的屬性,domain用來指定域,默認值爲當前域, path用來指定路徑,默認值爲"/",即根目錄。由於 <access>單獨使用,所以要用/結尾,以後對於類似的情況不再贅述。

  <meta 屬性 content="值" scheme="格式" forua="true|false"/> 和HTML中的類似,提供了該DECK的meta信息。屬性是必選的,包括一下三種情況name="name" UP.Link Server忽略meta數據 

http-equiv="name" UP.Link Server將meta 數據轉爲 HTTP 響應頭(同HTML)

  user-agent="agent" UP.Link Server 直接將 meta 數據傳給手機設備,content屬性也是必選的,其內容根據屬性而定。scheme屬性目前尚不支持。forua 爲可選屬性,指定在該wml文件傳到客戶端之前,<meta>標籤是不是被中間代理刪除(因爲傳輸的協議可能改變),默認值爲false。

  目前支持的meta數據:

  <meta http-equiv="Cache-Control" content="max-age=3600"/>指定DECK在手機內存緩存中的存儲時間段,默認的爲30天(除非內存耗盡),在該期間, 手機對於訪問過的DECK直接從緩存裏調用。如果信息是對時間敏感的,可以用max-age指定DECK在緩存裏的生存期,最小單位是秒, 如果指定爲0, 則每次都需通過連接服務器來調用該DECK。

<meta user-agent="vnd.up.markable" content="false"/>

和<meta user-agent="vnd.up.bookmark" content="指定的URL"/> 類似於普通瀏覽器的書籤功能。當用戶將一個CARD做了書籤後,手機瀏覽器首先用一個標記記錄該CARD, 這個標記默認的是<card>標籤中的title屬性(以後會講到),然後當用戶選擇了該書籤以後,瀏覽器就會打開被記錄的URL。但是因爲在默認的情況下,手機會記錄所有的DECK,所以,一般<meta>被用來使手機不要記錄當前的URL,即<meta user-agent="vnd.up.markable" content="false"/>。此外, 如果要爲書籤指定不同於當前DRECk的 URL,用<meta user-agent="vnd.up.bookmark" content="指定的URL"/>。

一個DECK可以包含多個CARD,每個CARD的內容可能不止一屏顯示,注意DECK,CARD和屏幕顯示範圍的關係。一個CARD用<card>和</card>包含。<card>可以包含以下可選的屬性:

<card id="name" title="label" newcontext="false" ordered="true" onenterforward="url" onenterbackward="url" ontimer="url">

  *id屬性用來指定CARD的名字,可用來在CARD間跳轉,相當於在HTML中在頁內跳轉時用<A NAME="jumpHere">。

  *title屬性用來作爲書籤的標記,該屬性一般不會顯示在屏幕上。

  *newcontext屬性,默認值爲false, 用來指示當跳轉到本CARD時,手機是不是要清除以前保留的信息,包括變量,堆棧裏的歷史記錄,重新設置手機狀態等。

  *ordered屬性,默認值是true,表明該CARD裏的內容是按固定的順序顯示, 還是按用戶的選擇來顯示。這點和HTMl不同,CARD 頁面裏的內容可以按一定的順序顯示,默認的是按線性順序顯示,即按代碼的順序, 但是,要注意的是,以下三個標籤必須按以下順序來寫<onevent><timer><do>, (這和以後要講的“事件”有關)。這樣做是爲了方便填表單,當ordered設置爲true時,如果一個表單的內容不能在一屏裏顯示完,就分成多屏顯示;當ordered設置爲false時, 手機可以顯示一個概要CARD來總結有效的選項,用戶可以從中選取表單選項來填寫。

  *onXXX屬性,類似於HTML標籤中的onXXX屬性,用來捕捉事件,當事件被觸發時執行指定的操作(任務),在這裏是轉向某個URL。



WML學習(三)

顯示文本

  在文本的顯示上WML基本和HTML相同。文字段落包含在<p align= "alignment" mode=" wrapmode">和</p>之間,align屬性指定該段文字的對齊方式,默認的是left,其他可選擇right和center;mode屬性指定當一行顯示不下所有的文字時是否自動換行,默認的是自動換行wrap,如果選nowrap,則在一行中顯示,瀏覽器會通過類似於水平滾動條的機制來顯示所有文字。

  換行標籤也一樣爲<br/>,這裏先替一下,在標單中如果有多個<input>或者<select>,其間不要用<br/>,否則會使手機瀏覽器認爲是斷點而把表單分頁顯示。

  文字的修飾標籤有<b>、<i>、<u>、<em>、<strong>、<big>和<small>,意義和HTML裏的相同。

  表格的顯示標籤也和HTML相近,使用<table title="name" align="left|right|center" columns="列數">、<tr>和<td>來顯示,<table>的title屬性用來給表格取個名字,columns屬性指定表的列數,不能爲0,可選的align屬性和前面提到的一樣是對齊方式。表格中可以包含文字和圖片。



test1.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>

<p align="center">

<i>Hello</i><br/>

<b><i>World!</i></b>

<table title="mytable" align="right" columns="2">

<tr>

<td>1-1</td>

<td>1-2</td>

</tr>

<tr>

<td>2-1</td>

<td>2-2</td>

</tr>

</table>

</p>

</card>

</wml>

顯示圖片

  顯示圖片(1位黑白BMP圖片)的標籤一樣類似於HTML,<img alt="text" src="url" 

localsrc="icon" align="left" height="n" width="n" vspace="n" hspace="n"/>,屬

性中alt和src是必須要有的,其他可選。另外要注意的是<img>要放在<p>裏,不能放在

<do>和<option>等功能健標籤和選單標籤裏。

  *alt屬性用來指定當手機不支持圖片顯示時用來顯示的文字。

  *src屬性指定圖片的URL,但當有了以下的localsrc屬性時,手機瀏覽器就忽略src

屬性。

  *localsrc屬性用來指定顯示存在手機ROM中的圖標,如果找不到,則到UP.Link Se

rver上去找。

  *可選的align屬性用來表明圖片同當前行文本的對齊方式,默認值爲bottom,可選

to和middle。

  *height、width、vspace、hspace屬性分別指定圖片的長寬和距環繞文字的間距,

目前不是所有的WAP手機都支持這些屬性。

test2.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>

<p align="center"><img alt=":)" src="xxx.bmp" localsrc="smileyface"/></p>

</card>

</wml>



WML學習(四)

錨和任務

  連接是 HTML 頁面裏最基本的功能, 在 WML 裏也一樣用 <a href="ur

l" title="label"> 和 </a>來包括用來建立連接的文字,必選屬性href指定了要打開的

URL,可選的title屬性給該連接取個標記名字,這個名字將作爲軟按鈕之一的ACCEPT鍵

(詳見以前的HDML入門文章)的標記顯示在屏幕的軟按鈕區,所以通常可以將屬性作爲提

示文字是用。

  然而,以上的連接在WML裏只是任務的一種情況,爲了能夠使用其它任務,所以引進

了新的標籤<anchor title="label">任務標籤 文本</anchor>,<a>其實是當任務標籤爲

<go/>時的簡單表示方式。

test3.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>

<p>

<anchor title="Link1"><go href="test1.wml"/>News</anchor><br/>

<a title="Link2" href="test2.wml">Sports</a>

</p>

</card>

</wml>

  WML裏的任務標籤有以下幾種,除了用於<anchor>,還可以用在事件中:

  1)<go>用來指示瀏覽器顯示指定的URL,包括DECK的第一個CARD或者指定的CARD。語

法如下:

  <go href="url" sendreferer="false|true" method="get|post" accept-charset

="charset">

  <postfield name="name" value="value"/>

  <setvar name="name" value="value"/>

  </go>

  其中href屬性爲必選,其他爲可選。sendreferer屬性表示是否傳遞調用href所指定

的URL的頁面的URL,也就是當前頁的URL,即 HTTP 頭中的HTTP_REFERER,默認值爲fal

se,可選值爲true。method和HTML中的表單FORM的method屬性一樣,指定表單是以get的

方式還是post的方式遞交,以便cgi處理,默認的值爲get,但如果未指定method但<go>

</go>間存在<postfield>,手機自動以post方式傳遞。accept-charset 屬性可覆蓋在H

TTP頭裏指定的字符集,可以寫多個字符集,如accept-charset="UTF-8,US-ASCII, ISO

-8859-1"。

  <postfield name="name" value="value"/>可以看作是HTML表單FORM中的<INPUT T

YPE="HIDDEN" NAME="變量名" VALUE="值">,通過它可以向指定的URL傳遞以“變量名/

值”形式的數據。name和value屬性都是必選的。注意只有這裏的變量是用來遞交給CGI

程序的。

  除了<postfield>,還可以在<go>和</go>間加入一句或者多句<setvar name="name

" value="value"/>,該語句的意思是,當觸發某一事件時,給變量賦值。

  要注意的是,當<go>和</go>之間沒有任何語句時,要用<go/>的形式,這點比較特

別,比如<anchor title="Link1"><go href="test.wml"/>News</anchor>。

  2)<prev>用來將當前頁面的URL壓入URL歷史堆棧,並打開此前的URL,若該URL不存

在,則<prev>無效。語法類似<go>:<prev><setvar name="name" value="value"/></p

rev>,<prev>和</prev>之間可加入一句或多句<setvar name="name" value="value"/>

,若不加,則必須變成<prev/>的形式。

  3)<refresh>用來刷新當前的頁面,從而使得頁面內的變量刷新,語法爲<refresh>

<setvar name="name" value="value"/></refresh>。

  4)<noop>,表示什麼也不做,該標籤不能用在<anchor>中,一般用在覆蓋DECK級的

<do>(以後會說明)。



WML學習(五)

顯示錶單

  類似於HTML的<FORM>,<fieldset>可用來包括一組表單選項,但不是必須的。前面

說過,當<card>的ordered設置爲false時,手機可以顯示一個概要CARD來總結有效的選

項,方便用戶從中選取表單選項來填寫,概要CARD就是根據<fieldset>和獨立的輸入框

<input>以及選單<select>來總結的。語法爲, <fieldset title="label">表單內容</

fieldset>,可選的title屬性除了可用來表示表單的名字外,還在概要CARD裏作爲選擇項的標題。表單內容可以是嵌套的<fieldset>,輸入框<input>,選單<select>和必要的

提示文本。

  <input name="variable" title="label" type="type" value="value" default="

default" format="specifier" emptyok="false|true" size="n" maxlength="n" tabi

ndex="n"/>,用來輸入文本,除了name屬性是必要的,其他可選。

  *name屬性,指定了用來存儲該輸入文本的變量名字。

  *title屬性,該輸入框的名字,同樣可被用來作爲概要CARD頁中的選項名。

  *type屬性,默認值爲text,如選擇password,則輸入的數據顯示爲*。

  *value屬性,在語法和行爲上等同於下面的default屬性,

  *default屬性,指定輸入框的默認值,即name屬性指定變量的默認值,當用戶輸入

新值時,該值無效,如果該值不符合以下format屬性的規定,則手機也忽略該默認值。

  *format 屬性,用來格式化輸入的數據,可用的標記如下,使用時可用“一位數字

標記”和“*標記”的形式,前者代表N個標記型字符,如3X, 後者代表任意個(小於ma

xlength屬性的值)標記型字符。

  標記   描述

  A     任何符號或者大寫字母(不包括數字)

  a     任何符號或者小寫字母(不包括數字)

  N     任何數字(不包括符號或者字母)

  X     任何符號、數字或者大寫字母(不可改變爲小寫字母)

  x     任何符號、數字或者小寫字母(不可改變爲大寫字母)

  M     任何符號、數字或者大寫字母(可改變爲小寫字母)或者多個字符,默認

爲首字大寫

  m     任何符號、數字或者小寫字母(可改變爲大寫字母)或者多個字符,默認

爲首字小寫

  *maxlength屬性,指定了用戶可輸入的最大字符長度,最大限制爲256個字符。

  *emptyok屬性,表示用戶可否不填輸入框,默認爲false,即要填。

  *size屬性,輸入框顯示長度,目前未被支持。

  *tabindex屬性,類似於在HTML表單中按TAB鍵後,焦點落在哪個選項上,該值決定

了這個選擇順序,數字大的排在後面。目前未被支持。

test4.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="card1" ordered="false">

<p>

USERNAME:<input name="userName" title="User Name" type="text" value="YourNam

eHere" format="*M" emptyok="false" maxlength="12" tabindex="1"/>

PASSWORD:<input name="password" title="Password" type="password" format="8x"

emptyok="false" maxlength="8" tabindex="2"/>

COMMENTS:<input name="comments" title="comment" type="text" value="YourComme

ntsHere" format="*M" emptyok="true" maxlength="30" tabindex="3"/>

</p>

</card>

</wml>

  將上例<card>中的odered的值改爲"true"試試看,然後再在<p>和</p>內加入<fiel

dset title="field1">和</fieldset>試試看。

  <select>選單類似於HTML表單中的<SELECT>,<select>和</select>間可包含<optg

roup>和<option>標籤,語法如下,所有屬性都爲可選:

  <select title="label" multiple="false|true" name="variable" default="def

ault" iname="index_var" ivalue="default" tabindex=" n">

  <optgroup title="label">選單內容</optgroup>

  <option title="label" value="value" onpick="url">

  事件或者文本

  </option>

  </select>

  *title屬性,如以上<input>的title屬性。

  *multiple屬性,指定用戶可否進行多項選擇,默認值爲false。

  *name屬性,用來存儲用戶選擇項的變量名,其值爲 <option>標籤的value屬性,若

用戶沒有選擇又沒有用 default 屬性指定默認值, 則手機將改變量賦值爲空字符串"",對於多項選擇,每個值用“;”分開。

  *default屬性,可爲name屬性指定的變量賦默認值。

  *iname屬性,用來記錄用戶選擇項的位置,相應的值從 1 開始。 若沒選,則該值

爲0。

  *ivalue屬性,用來記錄默認值所在的位置。

  <optgroup>可用來將多個<option>分組,<optgroup>和</optgroup>間還可包括<op

tgroup>和<option>,該標籤目前尚未被支持。

  <option>,類似於HTML中選單的<OPTION>,用來表示選單的可選項。<option>和</

option>間可包括事件(見下節)和選單的顯示文本。<option> 的屬性爲可選,其中valu

e屬性用來提供值,當選到該項後,將該值賦給<select> 的name屬性所指定的變量。on

pick屬性,用來指定用戶選到該項並按ACCEPT鍵後所打開頁面的URL。

test5.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="card0" ordered="false">

<p>

Please select a city...

<select title="Cities List" name="city">

<option title="Beijing" value="c1">Beijing</option>

<option title="Shanghai" value="c2">Shanghai</option>

<option title="Hongkong" value="c3">Hongkong</option>

</select>

Please select columns...

<select title="Column List" multiple="true" name="col">

<option title="Hot News" value="l1">News</option>

<option title="Cool Sports" value="l2">Sports</option>

<option title="Pop Enter,,," value="l3">Entertainment</option>

</select>

</p>

</card>

</wml>

 

WML學習(六)

事件

  WML的事件基本上分爲兩大類,一類是鍵盤(包括軟硬按鈕)輸入事件,用<do>標籤來

處理,另一類是相關頁面內部的事件,用<onevent>標籤來處理。

  <do>的語法如下:<do type="type" label="label" name="name" optional="fals

e|true">任務</do>,任務就是以前提到的四種任務。<do>的屬性中,type是必選的,其

他爲可選。

  *label屬性,指定了軟按鈕在屏幕上的顯示文本。目前type屬性爲delete,help,

prev時該屬性無效。 

  *name屬性,爲<do>取個名字,同一的CARD裏的<do>不能重名。如果CARD級的<do>和

DECK級的<do>同名,則覆蓋DECK級的<do>。

  *optional屬性,指定手機是不是可以忽略這個事件,默認值是false。

  *type屬性,指定觸發的事件,具體如下;

  type值    觸發原因

  accept    調用ACCEPT按鈕機制

  delete    調用DELETE按鈕機制

  help     調用HELP按鈕機制

  options   調用選擇按鈕機制

  prev     調用PREV按鈕機制

  reset    調用清除和重新設定手機狀態時的RESET機制(目前不支持)

  unknown    調用unknown機制,等於type=""(目前不支持)

  vnd. co-type 調用廠商特定的機制(目前不支持)

  X-*, x-*   供以後使用(不保留)(目前不支持)

test6.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org

/DTD/wml_1.1.xml">

<wml>

<head>

<meta http-equiv="Cache-Control" content="max-age=0"/>

</head>

<card id="card0" ordered="false">

<do type="accept" label="InputName" name="do1">

<go href="#card01"/>

</do>

<p>

NAME:<input name="userName" title="User Name" type="text" format="*M" emptyo

k="false" maxlength="12"/>

</p>

</card>

<card id="card01">

<p>

You name is $(userName:noesc).

</p>

</card>

</wml>

 

<onevent>的語法如下,<onevent type="type">任務</onevent>,必選屬性type的

取值如下:

  type值     如果用戶執行了以下操作就執行任務

  onpick     用戶選擇或不選一個<option>項時。

  onenterforward 用戶使用<go>任務到達一個CARD時。

  onenterbackward 用戶使用<prev>任務返回到前面的CARD時,或者按BACK按鈕時。

  ontimer     當<timer>過期時。

test7.wml

---------------

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org
/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/>
</head>
<card id="card0" ordered="false">
<p>
Please select a city...
<select title="Cities List" name="city">
<option title="Beijing" value="Beijing">
<onevent type="onpick">
<go href="#card01"/>
</onevent>Beijing</option>
<option title="Shanghai" value="Shanghai" onpick="#card01">Shanghai</option>
<option title="Hongkong" value="Hongkong" onpick="#card01">Hongkong</option>
</select>
</p>
</card>
<card id="card01">
<p>
Yore Living in $(city:noesc)
</p>
</card>
</wml>
<timer/>可以用來在用戶不進行任何操作的一段時間後,自動執行一個任務,任何
激活CARD頁面的任務和用戶操作都會啓動<timer/>,而任務進行時,<timer/>就停止。
每個CARD只能有一個<timer/>,一個<timer/>只能觸發一個任務。語法如下:<timer n
ame="variable" value="value"/>,其中name爲可選屬性,指定爲一個變量名,當退出該CARD時,該變量存儲此時定時器的值,當定時器超時時,手機將該變量設爲0;value爲必選屬性,用來設置定時器的定時值,最小單位爲0.1秒。

test8.wml

---------------

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org
/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/>
</head>
<card id="card1" ontimer="#card2">
<timer name="time1" value="50"/>
<p align="center">
After 5s, goto card2
</p>
</card>
<card id="card2">
<onevent type="ontimer">
<go href="#card1"/>
</onevent>
<timer name="time2" value="50"/>
<p align="center">
Here is card2!
</p>
</card>
</wml>

再提一下,<onevent> <timer> <do>三者必須按以上順序寫。
此外在DECK級還可以加入<template>,用來將事件捆綁在DECK級上,語法如下:
<template onenterforward="url" onenterbackward="url" ontimer="url">
<do>或者<onevent>
</template>

test9.wml

---------------

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org
/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/>
</head>
<template>
<do type="accept" label="deckPress" name="do1">
<go href="#card01"/>
</do>
</template>
<card id="card0" ordered="false">
<do type="accept" label="cardPress" name="do1">
<go href="#card02"/>
</do>
<p>
Press ACCEPT...
</p>
</card>
<card id="card01">
<p>
Here is card01
</p>
</card>
<card id="card02">
<p>
Here is card02
</p>
</card>
</wml>



WML學習(七)
CGI編程
1)在WEB服務器上添加WML的MIME類型 對於IIS4,可在其管理器裏的站點屬性中加入新的MIME類型,後綴.wml和 MIME類 型text/vnd.wap.wml。 對於PWS,可修改註冊表,先在 HKEY_CLASSES_ROOT層加入主鍵.wml,再加入串值Content Type爲ext/vnd.wap.wml,
然後在HKEY_LOCAL_MACHINE\Software\CLASSES\MIME\Database\Content Type\中加入主鍵text/vnd.wap.wml,再加入串值Extension爲.wml。以前提到的HDML也用類似的方法。

2)以http方式訪問wml文件 在手機瀏覽器的URL欄裏輸入http://localhost/test.wml,就可以訪問WML文件了。

3)CGI設計和普通CGI變成的方式差不多,只是返回結果時,先要輸出Content-Type爲text/
vnd.wap.wml,然後再輸出WML內容。

test10.wml

---------------

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org
/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/>
</head>
<card id="card0">
<do type="accept" label="Input Name" name="do1">
<go href="http://localhost/test.asp" method="post">
<postfield name="uid" value="123456"/>
<postfield name="uname" value="$(userName:esc)"/>
</go>
</do>
<p>
NAME:<input name="userName" title="User Name" type="text" format="*M" emptyo
k="false" maxlength="12"/>
</p>
</card>



test10.asp
--------------------
<%
uid=Request.Form("uid")
userName=Request.Form("uname")
Response.ContentType="text/vnd.wap.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>
<p>
USERNAME:<%=userName%>
USER__ID:<%=uid%>
</p>
</card>
</wml>



WML學習(八)
WAP網站服務器配置
1)設置APACHE WEB SERVER
不管是NT 還是UNIX 或LINUX ,都是修改 Apache 安裝目錄下的conf/mime.types文件
在該文件中增加以下內容:
text/vnd.wap.wml .wml
image/vnd.wap.wbmp .wbmp
application/vnd.wap.wmlc .wmlc
text/vnd.wap.wmls .wmls
application/vnd.wap.wmlsc .wmlsc
存盤
重新啓動APACHE WEB SERVER 即可。


2) 基於WINDOW NT平臺的IIS設置WAP SERVER
只要按照以下的簡單設置,就可以讓NT IIS成爲WAP服務器,您可以撰寫WML網頁或者開發各種服務。
設定方式:(先確定NT Server已經安裝IIS了服務)
執行NT操作系統下的【開始】/【程序】/【Windows NT Option Pack】/【IIS 4.0】/Internet服務管理員。在IIS服務管理員窗口內,點選主機電腦名稱後,按鼠標右鍵,點選“屬性”選項;在屬性窗後下部有一個文件類型按鈕,單擊此按鈕,會出現文件類型界面;單擊‘新增類型’按鈕,然後在相關的擴展名欄中填寫 .wml ,在內容類型(MIME)欄中填寫 text/vnd.wap.wml 單擊‘確定’按鈕
重複以上步驟將以下WML類型新增至MIME內:
相關的擴展名 內容類型(MIME)
.wml  text/vnd.wap.wml
.wmlc application/vnd.wap.wmlc
.wmls  text/vnd.wap.wmlscript
.wmlsc  application/vnd.wap.wmlscriptc
.wbmp  image/vnd.wap.wbmp
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章