WMLScript腳本程序設(shè)計(jì)_Xml教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:怎樣用XMLHTTP檢測(cè)URL及探測(cè)服務(wù)器信息
      主要利用了XMLHTTP的一些方法和屬性來獲取服務(wù)器的信息。 XMLHTTP 對(duì)象方法和對(duì)象屬性附于本文后面。 關(guān)于狀態(tài)碼的問題,可以見我的另外一篇文檔《互聯(lián)網(wǎng)HTTP連接等出錯(cuò)代碼大全》 http://www.csdn.net/Develop/Article/16/16477.shtm html head title利用XM

      作為一種編輯語言,WMLScript提供了強(qiáng)大的函數(shù)、語句和庫功能,以及外部編輯、訪問控制等支持,同時(shí)對(duì)程序運(yùn)行中可能產(chǎn)生的錯(cuò)誤給出了檢測(cè)手段和具體的解決辦法。這些內(nèi)容屬于WMLScript的腳本程序設(shè)計(jì)知識(shí)和進(jìn)一步的編程規(guī)定,我們本章就對(duì)此進(jìn)行詳細(xì)介紹。

        5.1 語句

        前面我們學(xué)習(xí)了變量、操作符和表達(dá)式,但僅由這些內(nèi)容并不能完成某個(gè)完整的功能,因?yàn)樗麄儾荒苄纬赏暾牟僮骰蛱幚沓绦颉W兞烤腿缤c嚴(yán)重的單詞,表達(dá)式如語言中的詞組,他們都不能表達(dá)一個(gè)完整的意思;只有語句,是語言中完整的句子,能夠表達(dá)完整的意思并實(shí)現(xiàn)某個(gè)完整的功能。WML Script提供了豐富的語句功能,使用這些語句我們可以在WML的卡片中建立交互功能和其他需要的復(fù)雜功能。

        在WML Script中,每條語句的后面都需要以一個(gè)分號(hào)(;)結(jié)尾。為了養(yǎng)成嚴(yán)謹(jǐn)?shù)木幊田L(fēng)格,建議大家編寫腳本時(shí),語句后一定要加上分號(hào)(;),這也有助于我們形成一種良好的編程習(xí)慣。

        WML Script語句的書寫和排列格式比較自由。我們可以在同一程序行中連續(xù)寫上多個(gè)語句,也可以把同一語句分成多行排列。WML Script將根據(jù)分號(hào)(;)來確定語句的具體內(nèi)容。

        WML Script的語句主要包括兩類。第一類是基本語句,如空語句、表達(dá)式語句、塊語句、變量語句和return語句等;第二類是條件語句,如if語句;第三類是循環(huán)語句,如while語句、for語句、break語句和continue語句等。下面我們分別講解這些語句的語法、功能和使用方法。

        5.1.1 基本語句

        WML Script基本語句主要用于程序格式控制和變量聲明,其中有些語句我們已經(jīng)不太陌生了。

        空語句

        空語句用于定義一個(gè)空的程序行,它沒有任何標(biāo)識(shí)符和操作符,也不執(zhí)行任何操作。它只是以分號(hào)(;)結(jié)束。其語法格式為:

        ;

        顯然,空語句是一種十分特殊的語句。由是我們?yōu)榱俗尦绦蚓哂懈玫目勺x性,通常在程序中的適當(dāng)?shù)胤郊由蠋讉(gè)空語句,以起到分隔或突出的作用。例如,下面的幾行程序中就含有一個(gè)空語句:

        str="Hello";

        val=25;

        ;

        MyVal=val*val+5;

        alert("Hi,Hi!!!");

        再如,while語句用于判斷一個(gè)條件并在條件滿足的時(shí)候執(zhí)行相應(yīng)的任務(wù),但如果希望條件滿足的時(shí)候什么也不作,那么就可以給它配上一個(gè)空語句,使之條件滿足的執(zhí)行空操作:

        while(!poll(device));

        這實(shí)際上是while語句和空語句組成的兩條語句。其中的分號(hào)(;)在這里就代表了空語句。這兩條語句的作用是在poll()函數(shù)為真()之前一直等待。

        表達(dá)式語句

        表達(dá)式語句用于向變量賦值,或進(jìn)行數(shù)學(xué)計(jì)算,或進(jìn)行函數(shù)調(diào)用。表達(dá)式語句也是我們最常用的一種語句,語法格式為:

        表達(dá)式;

        下面幾行程序都是合法的表達(dá)式語句:

        str="Hey"+yourName;

        val3=prevVal+4

        counter++;

        myValue1=counter,myValue2=val3

        alert("Watch out!");

        retVal=16*Lang.max(val3,counter);

        塊語句

        塊語句使用兩個(gè)花括號(hào)({ })包含一個(gè)語句集,形成一個(gè)語句體。WML Script的許多語句都需要使用塊語句來實(shí)現(xiàn)語句體,快語句的語法格式為:

        {

        語句列表;

        }

        下面的簡(jiǎn)單程序就是使用塊語句的例子:

        }

        vari=0;

        var x=Lang.abs(b);

        popUp("Remember!");

        }

        變量語句

        變量語句用于生命變量并可進(jìn)行變量的初始化賦值。如果用戶不賦值,那么WML Script會(huì)自動(dòng)將變量語句生命的變量賦予一個(gè)空字符串("")。基本的語法格式為:

        var 變量名;

        如果像一次生命多個(gè)變量,則相鄰變量名之間使用逗號(hào)(,)間隔,其語法格式為:

        VAR 變量名1,變量名2......,變量名n;

        如果想在生命變量時(shí)同時(shí)初始化變量,則可按如下語法格式書寫:

        var 變量名=初始化

        為便于大家更好的掌握變量語句,我們給出一個(gè)多出使用該語句的程序:

        function count(stu){

        var result=0; //聲明變量的同時(shí)初始化變量

        while(str!=""){

        var ind=0; //每次循環(huán)都初始化一次

        // 為退出循環(huán),本塊語句內(nèi)應(yīng)當(dāng)提供修改變量str值的語句

        };

        return result

        };

        function example(param){

        var a=0;

        if(param>a){

        var b=a+1; //聲明b變量的同時(shí)使用a變量初始化b變量

        }else{

        var b=a+2; //聲明c變量的同時(shí)使用a變量初始化c變量

        };

        return a; //返回a變量的值

        };

        注釋語句

        嚴(yán)格來講,注釋語句在WML Script中還不算是真正的語句,它只是一種前指向的規(guī)定。不過它也有嚴(yán)格的語法和標(biāo)注方法,所以我們這里還是像其他編程語言處理的一樣,把WML Script注釋方法以語句的形式介紹一下。

        注釋在程序執(zhí)行的時(shí)候沒有任何作用,但是可以用于對(duì)程序進(jìn)行解釋,則增強(qiáng)程序的可讀性。為了形成良好的編程風(fēng)格,我們應(yīng)該養(yǎng)成書寫注釋的良好習(xí)慣,注釋有兩種表達(dá)方式:

        (1)通過雙斜線注釋一行,這樣在雙斜先后的字符將成為注釋而不被執(zhí)行。該注釋行可以單獨(dú)一行書寫,也可以放在其他語句的后面。

        例如,可以進(jìn)行如下所示的注釋:

        //變量j用于小數(shù)每月的天數(shù)

        j=0; //我們這里將j賦值為0

        (2)通過符號(hào)“/*”和“*/”來規(guī)定注釋語句,這種注釋方式可以進(jìn)行多行注釋,符號(hào)“/*”和“*/”之間的內(nèi)容就是注釋語句。例如,可以進(jìn)行如下所示的多行注釋:

        /*我們定義了兩個(gè)變量:i和j。其中:

        i用于描述每年中的月數(shù),

        而j用于描述每月的天數(shù)*/

        j=0; /*我們這里將j賦值為0*/

        return語句

        return語句主要用在函數(shù)體中,在函數(shù)結(jié)束前,可以通過return語句,把函數(shù)處理的結(jié)果返回給調(diào)用函數(shù)的語句。它的語法格式如下:

        return表達(dá)式;

        下面的函數(shù)給出了應(yīng)用return語句的例子:

        function square(x){

        if(!(Lang.isFloat(x)))return invalid;

        return x*x

        };

        5.1.2 條件語句

        在條件語句中,當(dāng)滿足某種條件時(shí) ,就會(huì)執(zhí)行指定的一些代碼,而在代碼組另外某種條件時(shí),則會(huì)執(zhí)行另外一些代碼。WML Script的條件語句就是if...else語句,它的一般表達(dá)相識(shí)如下:

        if(條件){

        代碼塊1

        }

        else{

        代碼塊2

        }

        這樣,當(dāng)條件滿足時(shí),就執(zhí)行代碼塊1;如果條件不滿足則執(zhí)行代碼塊2。代碼塊和代碼塊2中如果只有一個(gè)條語句,那么,花括號(hào)({ })就可以省略;而如果有多條語句,則必須實(shí)用花括號(hào)將代碼塊包括在其中。在if...else語句種,其中的else部分是可選的,也就是說,我們可以使用如下的表達(dá)形式:

        if(條件){

        代碼塊

        }

        這樣,當(dāng)條件滿足時(shí),就執(zhí)行代碼塊,如果條件不滿足則什么也不做。

        例如,如果我們需要對(duì)一個(gè)學(xué)生的成績(jī)進(jìn)行判定,如果大于等于60分,那么我們就認(rèn)為該學(xué)生成績(jī)合格了,反之則認(rèn)為不合格,同時(shí)一并將狀態(tài)記錄到變量status種,相應(yīng)的WMLScript語句如下所示:

        if(score>=60) status="pass";

        else status="fail";

        再如,我們可以通過對(duì)天氣是否陽光普照(sunShines)的情況進(jìn)行判斷,來給變量myDay賦值,并累計(jì)好天氣(goodDays)的天數(shù)。程序如下:

        if(sunShines) {

        myDay="Good";

        goodDays++;

        }else

        myDays="Oh well...";

        5.1.3 循環(huán)語句

        使用循環(huán)語句可以反復(fù)執(zhí)行某個(gè)代碼塊,直到循環(huán)結(jié)束條件滿足后才停止執(zhí)行。WML Script中有兩種循環(huán)語句:for語句和while語句,同時(shí)還有兩終于循環(huán)密切相關(guān)的操作語言:break語句和continue語句。

        for語句

        for語句可以創(chuàng)建一個(gè)帶條件的循環(huán),它還有3個(gè)可選的條件表達(dá)式,用于控制循環(huán)。這3個(gè)條件表達(dá)式放在一個(gè)括號(hào)里,并以分號(hào)(;)間隔。for語句的一般語法形式如下:

        for(初始表達(dá)式;循環(huán)條件;遞增表達(dá)式){

        代碼塊

        }

        for語句的執(zhí)行主要包括以下幾個(gè)步驟:

        (1)執(zhí)行初始表達(dá)式。在一般情況下,初始表達(dá)式完成的功能是在循環(huán)中對(duì)循環(huán)計(jì)數(shù)器賦初值。所以在這種意義上,初始表達(dá)式也可以采用“var 變量聲明列表;”的形式來定義。

        (2)判斷循環(huán)條件。如果循環(huán)條件為真(ture),則執(zhí)行循環(huán)體中的語句,即至步驟(3);否則,循環(huán)條件為假(false)或者invalid,就結(jié)束循環(huán);

        (3)執(zhí)行循環(huán)代碼。然后,在執(zhí)行遞增表達(dá)式。一般情況下,我們?cè)谶f增表達(dá)式中對(duì)循環(huán)計(jì)數(shù)器進(jìn)行處理,最后在返回步驟2執(zhí)行。

        例如,下面的for語句建立了一個(gè)循環(huán)。初始表達(dá)式為定義變量index并付初值0,循環(huán)條件為index<100,遞增表達(dá)式為每循環(huán)一次index增加1。當(dāng)index增加到100時(shí)候,循環(huán)結(jié)束。程序如下:

        for(var index=0;index<100;index++){

        count+=index;

        myFunc(count);

        };

        while 語句

        while語句也可常見一個(gè)循環(huán),它的一般語法表達(dá)式如下:

        while(循環(huán)條件){

        代碼塊

        }

        while語句的執(zhí)行過程包括以下幾個(gè)步驟:

        (1)判斷循環(huán)條件是否為真。如果循環(huán)條件為真,則執(zhí)行循環(huán);如果為假或?yàn)閕nvalid,則跳出循環(huán)。

        (2)執(zhí)行循環(huán)中的代碼塊,然后返回步驟(1)

        下面的程序就是使用while語句的簡(jiǎn)單例子:

        var counter=0

        var total=0

        while(counter<3){

        counter++;

        total+=c;

        };

        其中建立的循環(huán)僅當(dāng)變量counter的值小于3時(shí)執(zhí)行,否則就結(jié)束循環(huán)。

        顯然,如果循環(huán)條件不能為假或?yàn)閕nvalid,那么while循環(huán)就會(huì)無休止的反復(fù)執(zhí)行下去。因此,我們?cè)诖a塊中一定要有能夠改變循環(huán)條件的變量,否則,就很有可能會(huì)陷入死循環(huán)而不能終止程序,下面就是一個(gè)死循環(huán)的例子:

        var x=1;

        var y=0;

        while(x<=1){

        y=x+1;

        }

        這個(gè)程序中,因?yàn)樽兞縳的值在循環(huán)中不能發(fā)生變化,所以循環(huán)條件在判斷的時(shí)候永遠(yuǎn)為真,所以成為了死循環(huán)。因此,對(duì)于while語句我們往往使用如下所示的語法形式:

        初始表達(dá)式

        while(循環(huán)條件){

        代碼塊

        遞增表達(dá)式

        }

        這種情況下,while語句的功能和for語句的功能就一樣了,不過用while語句編寫的程序可讀性更強(qiáng)一些。所以我們也可以采用while語句來完成index增加到100的循環(huán)。

        程序如下:

        var index=0

        while (index<100){

        counter+=index;

        myFunc(count);

        index++;

        };

        break語句

        為了更好的解決死循環(huán)問題,WML Script項(xiàng)大多數(shù)編成語言一樣提供了break語句。break語句可以使程序執(zhí)行跳出循環(huán)。不論是for語句還是while語句,只要在循環(huán)中使用了break語句,那么程序執(zhí)行到break語句后就立即跳出當(dāng)前循環(huán),然后繼續(xù)執(zhí)行下去。

        break語句的予發(fā)行時(shí)如下:

        break;

        例如,在下面的函數(shù)中我們使用了break語句,它是當(dāng)index=3時(shí)跳出循環(huán)。如果不是用該語句,函數(shù)中的while循環(huán)直到index=6時(shí)才可以結(jié)束。程序如下:

        funcition testBreak(x){

        var index=0;

        while(index<6){

        if(index==3)break;

        index++

        };

        retrun index*x;

        ;

        continue語句

        continue語句的功能和break語句的功能看起來有些類似,但實(shí)際上卻不一樣。循環(huán)執(zhí)行時(shí)遇到break語句通常是跳出當(dāng)前循環(huán),但循環(huán)執(zhí)行到continue語句并不跳出當(dāng)前循環(huán),而是不執(zhí)行循環(huán)中在continue語句后面的代碼塊,直接結(jié)束循環(huán)的本輪運(yùn)行,然后馬上開始下一輪循環(huán)的運(yùn)行。

        在while語句的循環(huán)中,遇到continue語句后,程序會(huì)直接判斷循環(huán)條件從而開始下一輪循環(huán)。在for語句的循環(huán)中,遇到continue語句后程序會(huì)直接執(zhí)行遞增表達(dá)式,然后判斷循環(huán)條件從而開始下一輪循環(huán)。

        例如,我們想利用for循環(huán)求1到10之間偶數(shù)的和,其WML Script語句如下:

        var sum=0;

        for (var j=1;j<=10;j++){

        if(j%2!=0)

        continue;

        sun+j;

        };

        在這個(gè)例子中,在j%2!=0的情況下,也就是j為奇數(shù)的情況下,程序執(zhí)行continue語句,這時(shí),并沒有如同break語句一樣跳出循環(huán)的運(yùn)行,而是不執(zhí)行循環(huán)中后面的語句而直接執(zhí)行遞增表達(dá)式開始下一輪循環(huán)的執(zhí)行,這樣,就可以不將其數(shù)j的之類即如總和中。

        再如,我們想利用while循環(huán)求0到4之間出3以外幾個(gè)數(shù)的和,則可以使用continue語句進(jìn)行控制。程序如下;

        var index=0;

        var count=0;

        while (index<5){

        index++;

        if(index==3)

        continue;

        cont+=index;

        };

        這以程序中,當(dāng)index等于3時(shí),“index==3”為真,所以執(zhí)行continue語句,不再把此時(shí)index的值加大count中,而是開始下一輪的循環(huán)。

        5.2 函數(shù)的聲明與調(diào)用

        在WML Script中,函數(shù)是一種能夠完成某種功能的代碼塊,并可以在腳本中被事件處理或被其他語句調(diào)用,也可以被WML程序所處理和調(diào)用。一般地,當(dāng)我們編寫WML Script腳本時(shí),如果腳本中的代碼長(zhǎng)度還是很長(zhǎng),則一般還可以根據(jù)功能將函數(shù)再進(jìn)行劃分,分成為幾個(gè)功能更加單一的函數(shù)。雖然說這樣對(duì)長(zhǎng)代碼的處理方法并不是編寫腳本程序的強(qiáng)制性要求,但通過函數(shù)的劃分和運(yùn)用,我們可以使得WML Script腳本具有更好的可讀性,也便于我們對(duì)腳本程序的編寫與調(diào)試。而且,如果在某些腳本中有多處完全相同的代碼塊,那么我們也可以將這些代碼快些為一個(gè)函數(shù),然后在腳本中調(diào)用這個(gè)函數(shù),從而提高代碼的重要性,簡(jiǎn)化代碼的編寫工作。

        WML Script的函數(shù)共用和Jave語言、C/C++語言的函數(shù)有所不同。我們知道,Jave語言、C/C++語言中有函數(shù)和過程之分,函數(shù)能夠完成一定的功能并有返回值,而過程進(jìn)可完成一定的功能但沒有返回值。可是,WML Script中并不區(qū)分函數(shù)和過程,因?yàn)樗挥泻瘮?shù),沒有過程。WML Script的函數(shù)完成一定功能后始終有返回值,不過返回值分兩種情況,即非空的返回值和空字符串("")形式的返回值。前者是真正的返回值,后者其實(shí)相當(dāng)于沒有返回值。也就是說,WML Script中的函數(shù)同時(shí)具有其他語言中的函數(shù)和過程的功能。

        5.2.1 函數(shù)的聲明

        使用函數(shù)時(shí),要根據(jù)函數(shù)的調(diào)用使用,而調(diào)用函數(shù)前必須聲明函數(shù),也就是需要先定義函數(shù)。WML Script中定義函數(shù)的一般方式如下:

        function函數(shù)名(參數(shù)列表)

        {

        代碼塊

        };

        另外,WML Script規(guī)定使用extern關(guān)鍵字來聲明一個(gè)外部函數(shù):

        extern function函數(shù)名(參數(shù)列表)

        {

        代碼塊

        };

        從中可以看出,函數(shù)的定義有以下3部分組成:

        (1)函數(shù)名。即函數(shù)的名稱,其命名規(guī)則應(yīng)遵守WML Script的標(biāo)識(shí)規(guī)則。調(diào)用函數(shù)時(shí)都是通過函數(shù)名進(jìn)行調(diào)用的,所以函數(shù)必須要有函數(shù)名。

        函數(shù)命名時(shí),一般要使用能夠描述函數(shù)功能的但此來作為函數(shù)名,也可以使用多個(gè)單詞組合進(jìn)行命名,這樣做的好處是能夠提高WML Script腳本的可讀性。

        函數(shù)名在同一個(gè)WML Script腳本文件里必須是唯一的。如若不然,則會(huì)導(dǎo)致函數(shù)定義混亂。

        (2)參數(shù)列表。即調(diào)用函數(shù)時(shí)需要的參數(shù)。參數(shù)列表通常是可選的,有的函數(shù)需要,有的函數(shù)可能不需要。參數(shù)列表的作用是向函數(shù)傳遞一些參數(shù),使得函數(shù)可以直接使用這些參數(shù)的值。

        調(diào)用函數(shù)的時(shí)候,參數(shù)個(gè)數(shù)和類型必須和函數(shù)定義示所聲明的參數(shù)個(gè)數(shù)即類型保持一致。而且函數(shù)的參數(shù)就如同似函數(shù)體內(nèi)的局部變量,它們?cè)诤瘮?shù)調(diào)用的時(shí)候被初始化。

        (3)代碼塊。它是函數(shù)的主體部分。代碼塊中的代碼包含在以對(duì)花括號(hào)({ })中,代碼塊可以執(zhí)行并完成函數(shù)的功能。編寫代碼塊是應(yīng)當(dāng)遵循WML Script的編程規(guī)則。

        有時(shí),函數(shù)需要返回一個(gè)值給調(diào)用函數(shù)的語句,則應(yīng)該在代碼塊的后面一行使用return語句,返回所需的數(shù)值。

        與C/C++等語言類似,WML Script的函數(shù)是可以嵌套的,以就是說,在一個(gè)函數(shù)中還可以調(diào)用其他函數(shù)。但是,函數(shù)聲明是不能嵌套,這是WML Script的強(qiáng)制性規(guī)定。

        下面幾行語句就是定義函數(shù)的簡(jiǎn)單例子:

        function currencyConverter(currency,exchangeRate)

        {

        return currency*exchangeRate;

        };

        其中,該函數(shù)的名稱為currencyConverter,參數(shù)有currency和exchangeRate兩個(gè),函數(shù)代碼塊包含一條語句,用于返回currency和exchangeRate的乘積。

        下面是一個(gè)使用extern定義外部函數(shù)的例子。其中函數(shù)名為textIt,它沒有參數(shù),函數(shù)體中定義了兩個(gè)賦值變量,一個(gè)賦整數(shù),一個(gè)賦函數(shù)值:

        extern function testIt(){

        var USD=10;

        var FIM =currencyConverter(USD,5.3)

        };

        5.2.2 函數(shù)的調(diào)用

        編寫好的函數(shù)必須經(jīng)過合法的調(diào)用,才可以發(fā)揮它應(yīng)用的作用。函數(shù)調(diào)用將返回一個(gè)值,比如一個(gè)計(jì)算結(jié)果。WML Script中的函數(shù)主要可以分為內(nèi)部函數(shù)、外部函數(shù)和庫函數(shù),下面我們就介紹這3類函數(shù)的調(diào)用方法。

        內(nèi)部函數(shù)

        所謂內(nèi)部函數(shù)是指函數(shù)的定義與其調(diào)用函數(shù)在同一個(gè)腳本文件內(nèi)的函數(shù),對(duì)內(nèi)部函數(shù)的調(diào)用稱為內(nèi)部調(diào)用。內(nèi)部函數(shù)的調(diào)用非常簡(jiǎn)單,只需提供函數(shù)名和所需參數(shù)值即可,參數(shù)值必須和函數(shù)定義時(shí)指定的參數(shù)個(gè)數(shù)即類型一致。而且函數(shù)調(diào)用需要使用操作符來接收或處理被調(diào)用的返回值。

        內(nèi)部函數(shù)可以在其定義之前調(diào)用,也可以在其定義之后調(diào)用。例如,下面就是一個(gè)在函數(shù)定義之后調(diào)用的例子。

        function test1(val){

        return val*val;

        };

        function test2(param){

        return test1(param+1);

        };

        這個(gè)例子中定義了兩個(gè)函數(shù)test1和test2。test1函數(shù)用于計(jì)算給定參數(shù)值的平方并將結(jié)果返回;test2函數(shù)將給定的參數(shù)值加1,然后這個(gè)和為參數(shù)值,來調(diào)用test1函數(shù),得到結(jié)果后在將給結(jié)果返回到調(diào)用test2函數(shù)的語句。

        注意,本例中test2函數(shù)調(diào)用了test1函數(shù),這種在函數(shù)中調(diào)用其他函數(shù)的方法稱為函數(shù)調(diào)用嵌套。WML Script的內(nèi)部函數(shù)、外部函數(shù)和庫函數(shù)都支持嵌套調(diào)用,后面我們專門介紹這方面的內(nèi)容。

        外部函數(shù)

        外部函數(shù)使一個(gè)在WML Scrupt外部文件中定義的函數(shù)。調(diào)用外部函數(shù)的方法與調(diào)用內(nèi)部函數(shù)的方法基本類似,不同之處在于調(diào)用處外部函數(shù)時(shí)一是要指定外部文件的地址即名稱,二是要在調(diào)用的外部函數(shù)名的前面加上外部文件的名稱。

        WML Script規(guī)則使用use url來指定外部文件,語法格式為:

        use url還有外部函數(shù)的外部文件名 外部文件所在的URL;

        這樣,WML Script的預(yù)編譯頭就可以將外部文件映射為一個(gè)可以在內(nèi)部使用的標(biāo)識(shí)。然后,使用這個(gè)標(biāo)識(shí)并加上井號(hào)鍵(#)和標(biāo)準(zhǔn)的函數(shù)調(diào)用即可實(shí)現(xiàn)外部函數(shù)調(diào)用,語法格式為:

        外部文件名#外部函數(shù)(參數(shù)列表);

        例如,http://www.host.com/script下有我們需要的外部文件,名為OtherScript,所以我們可使用use url來指定該文件:

        use url OtherScript"http://www.host.com/script"

        這一外部文件中含有我們需要調(diào)用的外部函數(shù)testme,則可采用“外部文件名#外部函數(shù)(參數(shù)列表)”的形式來調(diào)用它:

        OtherScript#testme(param+1);

        這個(gè)例子完整的寫出來,就是下面的程序:

        use url OtherScript"http://www.host.com/script"

        function test(param){

        return OtherScript#testme(param+1);

        };

        庫函數(shù)

        特別指定,WML Script的庫函數(shù)一律是指它的標(biāo)準(zhǔn)庫函數(shù)。因?yàn)榕c標(biāo)準(zhǔn)庫函數(shù)對(duì)應(yīng),WML Script還有一些非標(biāo)準(zhǔn)的庫函數(shù)。我們這里先介紹標(biāo)準(zhǔn)庫函數(shù),非標(biāo)準(zhǔn)庫函數(shù)后面再介紹。

        所有庫函數(shù)都有所數(shù)的庫,函數(shù)的庫中通常含有一類函數(shù)。因此,調(diào)用某個(gè)庫函數(shù)時(shí),一要指定它的庫名,二要指定它的函數(shù)名。WML Script規(guī)定,調(diào)用標(biāo)準(zhǔn)庫函數(shù)時(shí)可以通過在函數(shù)庫的名字后面加上句點(diǎn)號(hào)(.)和庫函數(shù)的標(biāo)準(zhǔn)調(diào)用來實(shí)現(xiàn),語法格式為:

        函數(shù)庫名.函數(shù)名(參數(shù)列表);

        例如,WML Script的浮點(diǎn)庫即Float庫中有一個(gè)開根方的函數(shù)sqrt,該函數(shù)只有一個(gè)參數(shù),那么調(diào)用squrt庫函數(shù)的方法為:

        Float.sqrt(number);//這里要求number大于或等于0

        下面給出了調(diào)用庫函數(shù)的簡(jiǎn)單例子。首先一param參數(shù)值調(diào)用Lang.abs()函數(shù),返回結(jié)果加1后再作為參數(shù)調(diào)用Float.sqrt()函數(shù),它的返回結(jié)果作為內(nèi)部函數(shù)test的返回值:

        function test(param){

        return Float.sqrt(Lang.abs(param)+1);

        };

        2.3 函數(shù)的嵌套調(diào)用

        WML Script的函數(shù)定義都是互相平行、獨(dú)立的,定義函數(shù)的時(shí)候我們不能在一個(gè)函數(shù)內(nèi)定義另外一個(gè)函數(shù),也就是說,函數(shù)定義是不能嵌套的。但是,函數(shù)調(diào)用確是可以嵌套的,也就是說,我們可以在調(diào)用一個(gè)函數(shù)的過程中調(diào)用另外一個(gè)函數(shù)。

        它的執(zhí)行過程是:

        (1)執(zhí)行a函數(shù)開頭部分;

        (2)遇到調(diào)用b函數(shù)的操作語句,流程則專區(qū)執(zhí)行b函數(shù);

        (3)執(zhí)行b函數(shù)開頭部分;

        (4)遇到調(diào)用c函數(shù)的操作語句,流程則專區(qū)執(zhí)行c函數(shù);

        (5)執(zhí)行b函數(shù),如果沒有其他嵌套的函數(shù),則完成c函數(shù)的全部操作;

        (6)返回調(diào)用c函數(shù)的語句,即返回到b函數(shù);

        (7)繼續(xù)執(zhí)行b函數(shù)中尚未執(zhí)行的操作,直到b函數(shù)結(jié)束;

        (8)返回a函數(shù)中調(diào)用b函數(shù)的語句;

        (9)繼續(xù)執(zhí)行a函數(shù)的剩余操作,直到函數(shù)結(jié)束。

        function myFunC(param1){

        return param1*param1=Float.squt(Lang.abs(param)+1);

        };

        function myFunB(param0){

        return myFunC(param0+1)*|param0+12;

        };

        function myFunA(param){

        return myFunB(param*param+1);

        };

        5.3 預(yù)編譯

        WML Script的預(yù)編譯主要用于在編譯階段控制編譯器的行為。與編譯頭一般在文件開頭和函數(shù)聲明之前指定,WML Script規(guī)定所有的預(yù)編譯頭都是一關(guān)鍵詞use加上指定的預(yù)編譯屬性進(jìn)行指定。

        在大多數(shù)的編程中,我們比較長(zhǎng)用的預(yù)編譯行為主要涉及外部文件聲明、訪問權(quán)和Meta信息設(shè)置。

        5.3.1 外部文件

        我們知道,使用URL地址可以定位一個(gè)WML Script文件。利用該URL地址;在WML Script編程中我們可以通過預(yù)編譯來調(diào)用WML Script的外部文件,外部文件預(yù)編譯頭的聲明方法是use url,其語法格式如下:

        use url外部文件名 "URL"地址

        這樣,我們?cè)诋?dāng)前文件的編程中就可以使用該預(yù)編譯頭聲明的外部文件,從而可以調(diào)用該外部文件的函數(shù)。其語法格式為:

        外部文件名#函數(shù)名(參數(shù)列表);

        例如,我們希望在當(dāng)前的WML Script程序中調(diào)用OtherScript外部文件中的check()函數(shù),而且我們知道OtherScript文件的URL地址為http://www.host.com/app/script。因此,我們可以使用use url來聲明這一外部文件:

        use url OtherScript"http://www.host.com/script"

        隨后,我們就可以在程序中調(diào)用OtherScript中的check()函數(shù)了:

        function test(par1,par2)

        {

        return OtherScript#check(par1,parr2);

        };

        其中調(diào)用執(zhí)行的過程如下:

        (1)找到WML Script外部文件的URL地址;

        (2)當(dāng)前函數(shù)從指定的URL地址值裝載外部文件;

        (3)檢測(cè)外部文件的內(nèi)容,并執(zhí)行其中的check()函數(shù)。

        ure url 預(yù)編譯頭指定的外部文件名在當(dāng)前程序中必須唯一,用戶不能指定不同URL地址的同名外部文件,否則在調(diào)用外部文件時(shí)就會(huì)發(fā)生混亂。

        另外,use url預(yù)編譯頭中的URL地址也可以是相對(duì)URL地址。相對(duì)URL的起始位置是當(dāng)前程序文件所在的位置,并在此基礎(chǔ)上根據(jù)URL進(jìn)行定位。

        如果URL地址中的字符包含有轉(zhuǎn)義字符,則WML Script將根據(jù)轉(zhuǎn)義要求進(jìn)行轉(zhuǎn)義。不過,程序在編譯的時(shí)候編譯器并不會(huì)對(duì)他們進(jìn)行轉(zhuǎn)義,而是在程序執(zhí)行時(shí)完成,檢查URL格式和URL地址的有效性。

        5.3.2 訪問權(quán)限

        我們可以使用訪問權(quán)限預(yù)編譯設(shè)保護(hù)文件的內(nèi)容,實(shí)現(xiàn)訪問控制。WML Script編程中,必須在調(diào)用外部函數(shù)之前使用訪問權(quán)限預(yù)編譯頭聲明外部文件的訪問權(quán)限。不過,WML Script訪問權(quán)限檢查的缺省值是不進(jìn)行檢查,即disabled.但訪問權(quán)限一經(jīng)聲明,以后當(dāng)調(diào)用外部函數(shù)的時(shí)候,編譯器就會(huì)檢查外部文件的訪問權(quán)限,以決定調(diào)用這是否有權(quán)使用該文件及其內(nèi)含函數(shù)。

        訪問權(quán)限預(yù)編譯頭的聲明方法是use access,其語法格式如下:

        use access domain操作域名 path操作路徑:

        訪問權(quán)限預(yù)編譯頭通過指定domain和path屬性來決定編譯器將要進(jìn)行什么樣的檢查工作。如果文件有domain或者path屬性,那么文件所在的URL就必須和屬性中的值一致。比較時(shí),域和路徑都依據(jù)URL大寫規(guī)則進(jìn)行比較。具體的比較預(yù)則如下:

        (1)操作域與URL中的域后綴相匹配。與后綴匹配是值所有的子域從后向前都必須一致。例如:www.wapforum.org和wapforum.org相匹配,而與forum.org并不匹配。

        (2)操作路徑和URL中的路徑前綴相匹配。路徑前綴匹配是值從前向后必須一致。例如:“/X/Y”與“/X”相匹配,而不是和“/XZ”相匹配。

        (3)卻省的domain數(shù)行為當(dāng)前的文件域,就是“/”。

        不過,為了簡(jiǎn)化編程,有時(shí)WMLScript并不需要直到外部文件的絕對(duì)路徑,我們只需提供文件的相對(duì)URL即可,用戶瀏覽器執(zhí)行程序是卡相對(duì)路徑自動(dòng)轉(zhuǎn)換為絕對(duì)路徑,根據(jù)路徑屬性進(jìn)行匹配。例如:如果訪問權(quán)限預(yù)編譯頭及其指定屬性為:

        use access domain"wapforum.org"path"/finance";

        則可以使用以下的路徑來調(diào)用指定文件中的外部函數(shù),它們都符合相對(duì)URL地址匹配規(guī)則:

        http://wapforum.org/finance/money.cgi

        http://www. wapforum.org/finance/money.cgi

        http://www. wapforum.org/finance/demos/packages.cgi?x+123&y+456

        而以下的路徑調(diào)用則非法的,因?yàn)樗鼈兓蛘卟僮饔虿粚?duì),或者URL地址不能與指定的相對(duì)URL相匹配:

        heep//www.test.net/finance

        http//www.qapforum.org/internal/foo.wml

        需要強(qiáng)調(diào)指出的是,WML Script規(guī)定,同一程序中只能定義一個(gè)訪問權(quán)限與編譯頭,否則就會(huì)導(dǎo)致編譯錯(cuò)誤。

        5.3.3 Meta 信息

        我們還可以通過與編譯頭的形式聲明WML Script文件的Meta信息。Meta信息主要用于指定文件所需Mete屬性的屬性名(Property name)、屬性值(Content)以及文件的配置(信息),屬性都屬于字符串類型的數(shù)據(jù)。Mate信息域編譯頭使用use meta聲明,其語法格式為:

        usr meta 屬性 該屬性Meta信息:

        Meta的屬性主要包括Name、HTTP Equiv和User Agent三種,下面我們分別講解它們的聲明方法:

        (1)Name。該屬性用于指定服務(wù)器使用的Meta信息。這些信息僅供服務(wù)使用,用戶瀏覽器并不理會(huì)這些信息。

        例如,以下Name屬性的Meta信息指定了服務(wù)器的創(chuàng)建時(shí)間:

        use meta name "Created""26-June-2000";

        該信息只會(huì)作用于服務(wù)器,而不會(huì)影響用戶瀏覽器的操作。

        (2)HTTP Equiv。該屬性用于指定需要解釋為HTTP頭的Meta信息。對(duì)于已經(jīng)編譯的文件來說,當(dāng)它到達(dá)用戶瀏覽器前,WML Script將根據(jù)HTTP Equiv屬性指定的Meta信息將文件轉(zhuǎn)換為WSP或HTTP的響應(yīng)頭,進(jìn)行文件的解釋和執(zhí)行。

        例如,以下聲明的http equiv屬性指定按照腳本語言的關(guān)鍵字來解釋當(dāng)前文件:

        use meta http equiv"Keywords""Script,Language";

        (3)User Agent。該屬性用于定義用戶瀏覽器使用的數(shù)據(jù)類型。例如:

        use meta user agent"Type""Test";

        它指定當(dāng)前數(shù)據(jù)必須立即發(fā)送給用戶瀏覽器,然后馬上清除掉。

        5.4 執(zhí)行時(shí)的錯(cuò)誤檢測(cè)與處理

        WML Script函數(shù)的功能提供用戶服務(wù),并希望用戶界面能在任何的狀況下運(yùn)作順利,因此錯(cuò)誤的處理是最大的課題,這表示了語言可能不提供預(yù)期的機(jī)制,如他應(yīng)該可以防止錯(cuò)誤發(fā)生或提醒用戶注意并采取適當(dāng)?shù)膭?dòng)作,種植儲(chǔ)蓄執(zhí)行是最后的手段。下面幾個(gè)小節(jié)列出了當(dāng)為碼下載并執(zhí)行時(shí)會(huì)發(fā)生的錯(cuò)誤,一些程序上的錯(cuò)誤并不在談?wù)摰姆秶?如無窮循環(huán)),像這類的例子就需要手動(dòng)來終止。

        5.4.1 錯(cuò)誤檢測(cè)

        錯(cuò)誤檢測(cè)工具能讓你檢測(cè)錯(cuò)誤但會(huì)干擾系統(tǒng)的動(dòng)作,因?yàn)閃ML Script是弱格式語言,所以由一些特殊功能的工具來檢測(cè)有invalid數(shù)據(jù)格式所引起的錯(cuò)誤:

        檢測(cè)給定的變量包含的是正確值:WML Scritp含有格式確認(rèn)函數(shù)庫程序如:Lang.isInt()Lang.isFloat()、Lang.parseInt()、Lang.parseFloat。

        檢測(cè)給定的變量包含的只是正確的格式:WMLScript含有運(yùn)算符typeof與isvalid能讓你使用。

        5.4.2錯(cuò)誤處理

        錯(cuò)誤處理是在發(fā)生錯(cuò)誤之后,有些狀況是錯(cuò)誤檢測(cè)無法防止的,如內(nèi)存限制后外部信號(hào)等,或者是數(shù)據(jù)很難處理,如溢出(overflow)或虧失(underflow),而這些狀況可以分為兩類:

        嚴(yán)重錯(cuò)誤(fatalerror):這種錯(cuò)誤會(huì)造成程序終止,因?yàn)閃ML Scritp程序會(huì)讓一些用戶界面調(diào)用,程序終止通常會(huì)跟調(diào)用它的用戶界面發(fā)出信號(hào),用戶界面就會(huì)告知用戶這個(gè)錯(cuò)誤。

        錯(cuò)誤(non-fatalerrow):這種錯(cuò)誤會(huì)把信號(hào)傳回程序,如一些特殊的值,然后由程序決定所要采取的行動(dòng)。

        下列的錯(cuò)誤是根據(jù)他們的嚴(yán)重性來區(qū)分。

        5.4.3 嚴(yán)重錯(cuò)誤(fatalerror)

        下面的小節(jié)會(huì)討論WML Script的嚴(yán)重錯(cuò)誤。

        位碼錯(cuò)誤(bytedode error)

        這些錯(cuò)誤跟位碼與由WML Script位碼解譯器所執(zhí)行的指令有關(guān)他們指出了錯(cuò)誤的元素群、無效的指令、指令所使用的參數(shù)無效,或指令無法執(zhí)行。

        驗(yàn)證錯(cuò)誤(verification failed)

        說明:調(diào)用的程序中的特定位碼無法通過驗(yàn)證。

        如何發(fā)生:每次程序試著用外部程序。

        范例:var a = 3*OtherScript#doThis(param)

        嚴(yán)重性:嚴(yán)重。

        判定狀況:當(dāng)檢測(cè)位碼驗(yàn)證式。

        解決方法:終止程序與WML Script解譯其調(diào)用者的錯(cuò)誤信號(hào)。

        說明:調(diào)用一個(gè)函數(shù)庫程序時(shí)發(fā)生嚴(yán)重錯(cuò)誤。

        如何發(fā)生:每次調(diào)用函數(shù)庫程序。

        范例:var a = string.format(param)

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方法:終止程序與WML Script解譯其調(diào)用者的錯(cuò)誤信號(hào)。

        說明:調(diào)用函數(shù)參數(shù)的數(shù)目跟被調(diào)用函數(shù)的參數(shù)數(shù)目不符合。

        如何發(fā)生:調(diào)用外部程序。

        范例:編譯器參生一個(gè)無效的參數(shù)給予指令使用,或者被調(diào)用的程序參數(shù)數(shù)目改變了。

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        嚴(yán)重性:嚴(yán)重。

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明: 在特定的程序中找不到所需要的外部程序。

        如何發(fā)生:調(diào)用外部程序。

        范例: var a =3*OtherScript#doThis(param)

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明: 由于在網(wǎng)絡(luò)服務(wù)器的程序存取又無法修復(fù)的錯(cuò)誤或特定程序并不在網(wǎng)絡(luò)服務(wù)器中所引起的程序無法載入。

        如何發(fā)生:調(diào)用外部程序。

        范例: var a =3*OtherScript#doThis(param)

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明: 存取錯(cuò)誤,所調(diào)用的外部程序加了保護(hù)。

        如何發(fā)生:調(diào)用外部程序

        范例:var a =3*OtherScript#doThis(param)

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明: 因?yàn)槌绦蝈e(cuò)誤造成stack underflow。

        如何發(fā)生:程序要取出(pop)一個(gè)空堆

        范例: 當(dāng)組譯器產(chǎn)生錯(cuò)誤碼。

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明:執(zhí)行調(diào)用Lang.abort() 是發(fā)生的錯(cuò)誤。

        如何發(fā)生:每當(dāng)程序調(diào)用Lang.abort()函數(shù)。

        范例: Lang.abort("unrecoverable error")

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明:發(fā)生堆棧溢出。

        如何發(fā)生:程序資源太多或要推入太多的變量到運(yùn)算之中。

        范例: function f|(x)(f(x+1););

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明:沒有多余的內(nèi)存可供解譯器使用。

        如何發(fā)生:作業(yè)系統(tǒng)無法配置多余的空間給解譯器適使用。

        范例: function f(x){

        x=x+"abcdefghijklmnopqrstuvxyz";

        f(x) ;

        };

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明:用戶終止程序的執(zhí)行(如按下reset鈕)

        如何發(fā)生:隨時(shí)。

        范例: 當(dāng)應(yīng)用程序正在執(zhí)行是用戶按下reset鈕。

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        說明:當(dāng)程序執(zhí)行中,發(fā)生了外部嚴(yán)重的錯(cuò)誤。

        如何發(fā)生:隨時(shí)。

        范例: 電力微弱,系統(tǒng)自動(dòng)。

        嚴(yán)重性:嚴(yán)重。

        判定狀況:無

        解決方案:終止程序與WML Script解譯器調(diào)用著的錯(cuò)誤信號(hào)。

        5.4.4 一般錯(cuò)誤(Nonfatal error)

        下面說明了WML Script的一般錯(cuò)誤:

        計(jì)算錯(cuò)誤(computational error)

        這些錯(cuò)誤是由于WML Script數(shù)學(xué)上的運(yùn)算所造成。

        除以零(divide by zero)

        說明:發(fā)生了除以零的狀況

        如何發(fā)生:當(dāng)程序中有除以零的狀況。

        范例:var a= 10;

        var b= 0;

        var x= a/b;

        var y= a div b;

        var z= a%b;

        a/=b;

        嚴(yán)重性: 一般。

        判定狀況:高

        解決方案:產(chǎn)生結(jié)果為invalid。

        說明:發(fā)生了除以零的狀況

        如何發(fā)生:程序要執(zhí)行浮點(diǎn)數(shù)運(yùn)算。

        范例:var a = Float.precision();

        var b = Float.precision();

        var c = a* b

        嚴(yán)重性:一般。

        判定狀況:高,在某些狀況很困難。

        解決方法:產(chǎn)生的結(jié)果為浮點(diǎn)數(shù)值0.0

        常數(shù)參考錯(cuò)誤(constant reference error)

        說明:所參考的浮點(diǎn)數(shù)實(shí)字為not a number。

        如何發(fā)生:程序試著存取一個(gè)浮點(diǎn)數(shù)實(shí)字但組譯器產(chǎn)生了not a number的浮點(diǎn)數(shù)常數(shù)。

        范例:參考浮點(diǎn)數(shù)常數(shù)。

        嚴(yán)重性:一般。

        判定狀況:高

        解決方法:這會(huì)產(chǎn)生invalid值。

        說明:參考的浮點(diǎn)數(shù)實(shí)字不是正無窮大就是負(fù)無窮大的浮點(diǎn)數(shù)常數(shù)。

        如何發(fā)生:程序試著存取一個(gè)浮點(diǎn)數(shù)實(shí)字但組譯器產(chǎn)生了正無窮大或負(fù)無窮大的浮點(diǎn)數(shù)常數(shù)。

        范例:參考浮點(diǎn)數(shù)常數(shù)。

        嚴(yán)重性:一般。

        判定狀況:高

        解決方法:這會(huì)產(chǎn)生invalid值。

        說明:需要參照浮點(diǎn)數(shù)值所發(fā)生的錯(cuò)誤。

        如何發(fā)生:程序需要使用浮點(diǎn)數(shù)值但環(huán)境值支持整數(shù)值。

        范例:var a = 3.14;

        嚴(yán)重性:一般

        判定狀況:高

        解決方法:這會(huì)產(chǎn)生invalid值。

        轉(zhuǎn)換錯(cuò)誤

        這個(gè)錯(cuò)誤的發(fā)生同WML Script所支持的自動(dòng)轉(zhuǎn)換有關(guān)。

        說明:欲轉(zhuǎn)換成整數(shù)值,但這個(gè)值超過整數(shù)所能接受的范圍(正或負(fù))。

        如何發(fā)生:程序試著自動(dòng)轉(zhuǎn)換成整數(shù)時(shí)。

        范例: var a = -"99999999999999999999999999999999999999999";

        嚴(yán)重性:一般

        判定狀況:高

        解決方法:這會(huì)產(chǎn)生invalid值。

        說明:欲轉(zhuǎn)換成浮點(diǎn)數(shù),但這個(gè)值小于浮點(diǎn)數(shù)所能接受的范圍(正或負(fù))。

        如何發(fā)生:程序時(shí)值自動(dòng)轉(zhuǎn)換成浮點(diǎn)數(shù)時(shí)。

        范例:var a = -"99999999999999999999999999999999999999999";

        嚴(yán)重性:一般

        判定狀況:高

        解決方法:這會(huì)產(chǎn)生invalid值。

        說明:欲轉(zhuǎn)換成浮點(diǎn)數(shù),但這個(gè)值小于浮點(diǎn)數(shù)所能接受的范圍(正或負(fù))。

        如何發(fā)生:程序時(shí)值自動(dòng)轉(zhuǎn)換成浮點(diǎn)數(shù)時(shí)。

        范例:var a = -"99999999999999999999999999999999999999999";

        嚴(yán)重性:一般

        判定狀況:高

        解決方法:這會(huì)產(chǎn)生浮點(diǎn)數(shù)0.0。

        6.5 URL函數(shù)庫

        名稱:URL

        說明:這個(gè)函數(shù)庫包含了處理絕對(duì)的URL與相對(duì)URL的程序,一般的URL語法如下:://:/;?#

        isValid

        程序:isValid(url)

        說明:如果給予的url值是正確的URL語法,則回傳ture,否則回傳false

        絕對(duì)與相關(guān)URL都能支持

        相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

        參數(shù):url=字符串

        回傳值:布爾值或invalid

        例外狀況:無

        范例:var a=URL.isValid

        ("http://www.acme.com/script#func()"); //a=ture

        var b=URL.isValid("../common#test()"); //b=ture

        var c=URL.isValid

        ("experimental?://www.acme.com/pub"); //c=false

        getScheme

        程序:getScheme(url)

        說明:回傳給予url的調(diào)用方式scheme

        絕對(duì)與相關(guān)URL都能支持

        相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.geScheme("http://w.a.com"); //a="http"

        var b=URL.getSceme("w.a.com"); //b=""

        getHost

        程序:getHost(url)

        說明:回傳給予url的主機(jī)

        絕對(duì)與相關(guān)URL都能支持

        相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.geHost("http://www.acom.com/pub"); //a="www.acm.com"

        var b=URL.getHost("path#fray"); //b=""

        getPort

        程序:getPort(url)

        說明:回傳給予url的端口(port)

        如果port沒有制定,則回傳空字符串

        絕對(duì)與相關(guān)URL都能支持

        相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.getPort("http://www.acom.80/path"); //a="80"

        var b=URL.getPort("http://www.acom./path"); //b=""

        getPath

        程序:getPath(url)

        說明:回傳給予url的路徑(path)

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.getPath("http://w.a.com/home/sub/comp#frag"); //a="/home/sub/comp"

        var b=URL.getPath("../home/sub/comp#frag"); //b="../home/sub/comp"

        getParameters

        程序:getParameters(url)

        說明:回傳給予url的路徑(parameter)

        如果沒有指定參數(shù),則回傳空字符串

        絕對(duì)與相關(guān)URL都能支持

        相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.getParameters("http://w.a.c/scr;3;2?x=1&y=3"); //a="3;2"

        var b=URL.getParameters("../scr3;2?x=1&y=3"); //b="../home/sub/comp"

        getQuery

        程序:getQuery(url)

        說明:回傳給予url的詢問部分(query)

        如果沒有指定的詢問部分,則回傳空字符串

        絕對(duì)與相關(guān)URL都能支持

        相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.getParameters("http://w.a.c/scr;3;2?x=1&y=3"); //a="3;2"

        getFragment

        程序:getFragment(url)

        說明:回傳給予url的片斷(fragment)

        如果沒有指定片斷,則回傳空字符串

        絕對(duì)與相關(guān)URL都能支持

        相關(guān)URL不會(huì)被轉(zhuǎn)成絕對(duì)URL

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.getFragment("http://www.acom.com/cont#fray"); //a="fray"

        getBase

        程序:getBase()

        說明:回傳次WML Script程序的絕對(duì)URL(沒有fragment的部分)。

        參數(shù):無

        回傳值:字符串

        例外狀況:無

        范例:var a=URL.getBase(); //Result;

        "http://www.acme.com/test.scr"

        getReferer

        程序:getReferer()

        說明:回傳調(diào)用目前程序資源的最小相關(guān)URL(與目前程序的基本URL的相關(guān))

        內(nèi)部程序調(diào)用并不會(huì)改變參照者

        如果目前的程序并沒有參照者,則回傳空字符串

        參數(shù):無

        回傳值:字符串

        例外狀況:無

        范例:var base=URL.getBase(); //base

        ="http://www.acme.com/current.scr"

        var prferer=URL.getReferer(); //referer="app.wml"

        resolve

        程序:resolve(baseUrl,embeddedUrl)

        說明:根據(jù)RFC2396的文件,由給予的基本base與插入embeddedUrl回傳絕對(duì)URL

        參數(shù):baseUrl=字符串

        embeddedUrl=字符串

        回傳值:字符串或invalid

        例外狀況:如果遇到不正確的URL語法,則回傳invalid

        范例:var a=URL.resolve(http://www.foo.com/,"foo.vcf"); //a="http://www.foo.com/foo.vcf"

        escapeString

        程序:escapeString(string)

        說明:這個(gè)程序會(huì)將所給與string字符串之中的特殊字符使用十六進(jìn)制逃脫序列來替代(你必須使用量為逃脫序列格式%xx),這些逃脫字符如下:

        控制字符(control characters):US-ASCII編碼的字符00-1F與7F

        空格(Space):US-ASCII碼編字符20十六進(jìn)制

        保留字(Reserved):";"|"/"|"?"|":"|"@"|"="|"+"|""|","

        Unwise:"{"|"}"|"|"|"\"|""|"["|"]"|"`"

        Delimes:"<"|">"|"#"|"%"|"<>"

        給予的字符串如果已經(jīng)是使用逃脫自負(fù),則不會(huì)執(zhí)行URL解析

        參數(shù):string=字符串

        回傳值:字符串或invalid

        例外狀況:如果字符串string含有非US-ASCII的字符,則回傳invalid

        范例:var a=URL.escapeString

        ("http://w.a.c/dck?x=u007ef#crd");

        // a="http%3a2f%2fw.a.c%2fdck%3fx%3def%23crd"

        unescapeString

        程序:unescapeString(string)

        說明:這個(gè)程序會(huì)將所給與string字符串之中每個(gè)可能是由URL.escapeString() 程序所產(chǎn)生的逃脫序列使用它所代表的字符加以替代。

        參數(shù):string=字符串

        回傳值:字符串或invalid

        例外狀況:如果字符串string含有非US-ASCII的字符,則回傳invalid

        范例:var a="http%3a2f%2fw.a.c%2fdck%3fx%3def%23crd";

        var b=URL.unescapeString(a); //b

        ="http://w.a.c/dck?x=12#crd"

        loadString

        程序:loadString(url,contentType)

        說明:回傳有所給予的絕對(duì)URL與contenttype所指出的內(nèi)容。

        如果內(nèi)容格是不是下列法則所規(guī)范的話,則是錯(cuò)誤的:

        你只能界定一種內(nèi)容格式,整個(gè)字符串必須和一種內(nèi)容格式相符,而 且你不能有額外的前或后空格。

        格式必須是正文,但次格式?jīng)]有限制,格式的開頭一定是"text/"。

        這個(gè)程序的動(dòng)作如下:

        文件的內(nèi)容會(huì)載入使用給予的contentType與url,其他所需的數(shù)形式有使用用戶界面的預(yù)設(shè)面。

        如果載入成功而且回傳的內(nèi)為格式與所給予的contentType相符,則內(nèi)文會(huì)被轉(zhuǎn)換成字符串再回傳。

        如果載入成功或回傳的內(nèi)文格式不正確的話,則會(huì)回傳特定的錯(cuò)誤碼。

        參數(shù):url=字符串

        contentYype=字符串

        回傳值:字符串、整數(shù)或invalid

        例外狀況:如果載入失敗其回傳的錯(cuò)誤碼和所使用的URL Scheme有關(guān)

        如果使用HTTP或WSP架構(gòu),會(huì)回傳HTTP錯(cuò)誤碼。

        如果給予的contentType錯(cuò)誤的話,則會(huì)回傳invalid

        范例:var a="http%3a2f%2fw.a.c%2fdck%3fx%3def%23crd";

        var b=URL.unescapeString(a); //b

        ="http://w.a.c/dck?x=12#crd"

        loadString

        程序:loadString(url,contentType)

        說明:回傳有所給予的絕對(duì)URL與contenttype所指出的內(nèi)容。

        如果內(nèi)容格是不是下列法則所規(guī)范的話,則是錯(cuò)誤的:

        你只能界定一種內(nèi)容格式,整個(gè)字符串必須和一種內(nèi)容格式相符,而 且你不能有額外的前或后空格。

        格式必須是正文,但次格式?jīng)]有限制,格式的開頭一定是"text/"。

        這個(gè)程序的動(dòng)作如下:

        文件的內(nèi)容會(huì)載入使用給予的contentType與url,其他內(nèi)文所需的數(shù)形式有使用用戶界面的預(yù)設(shè)面。

        如果載入成功而且回傳的內(nèi)容為格式與所給予的contentType相符,則內(nèi)文會(huì)被轉(zhuǎn)換成字符串再回傳。

        如果載入成功或回傳的內(nèi)文格式不正確的話,則會(huì)回傳特定的錯(cuò)誤碼。

        參數(shù):url=字符串

        contentYype=字符串

        回傳值:字符串、整數(shù)或invalid

        例外狀況:如果載入失敗其回傳的錯(cuò)誤碼和所使用的URL Scheme有關(guān)

        如果使用HTTP或WSP架構(gòu),會(huì)回傳HTTP錯(cuò)誤碼。

        如果給予的contentType錯(cuò)誤的話,則會(huì)回傳invalid

        范例:var myUrl="http://www.acme.com/vcards/myaddr.vcf";

        myCard=URL.loadString(myUrl,"text/x-vcard");

        6.6 WML瀏覽器函數(shù)庫

        名稱:WML Brower

        說明:這個(gè)函數(shù)庫所包含的程序是讓W(xué)ML Script用來存取與WML相關(guān)的內(nèi)文,這些程序不能有任何的副作用,并在下列的狀況下回傳invalid值。

        系統(tǒng)不支持WML瀏覽器。

        WML瀏覽器無法使用WML Script解譯器。

        getVar

        程序:getVar(name)

        說明:回傳目前瀏覽器內(nèi)文的所給予名稱name的變量值。

        如果所指定的變量不存在,回傳一個(gè)空字符串。

        變量名稱必須依照WML語法來使用。

        參數(shù):name=字符串

        回傳值:字符串或invalid

        例外狀況:如果變量名稱不合語法,則回傳invalid

        范例:var a=WMLBrowser.getVar("name");

        // a"Jon"或者變量的值

        setVar

        程序:setVar(name,value)

        說明:在目前的瀏覽器之中,如果所給予名稱name的變量,它的值同給予的值value設(shè)定的一樣的話,回傳ture,否則回傳false。

        變量名稱必須依照WML語法來使用。

        變量值必須是合法的XML CD ATA

        參數(shù):name=字符串

        value=字符串

        回傳值:布爾值或invalid

        例外狀況:如果變量名稱或它的值不合語法,則回傳invalid

        范例:var a=WMLBrowser.setVar("name",Mary); // a=true

        go

        程序:go(url)

        說明:將給予的url所標(biāo)記的內(nèi)文載入,這個(gè)程序予WML的GO動(dòng)作意思相同。

        如果所給予的url字空字符串(""),則不會(huì)載入任何內(nèi)文。

        go()與prev()函數(shù)庫程序會(huì)互相推翻,在回傳控制與WML瀏覽之前都可以加以調(diào)用多次。

        只有最后的調(diào)用設(shè)定的會(huì)保持作用,如果最后的調(diào)用為go()或prev(),其所設(shè)定的url為空字符串(""),所有的要求都會(huì)被取消。

        這個(gè)程序回傳空字符串。

        參數(shù):url=字符串

        回傳值:字符串或invalid

        例外狀況:無

        范例:varcard="http://www.acme.com/loc/app.dck#start";WMLBrowser.go(card

        )

        prev

        程序:prev()

        說明:告訴WML瀏覽器回到先前的WML Card,這個(gè)程序的功能與WML中的prev動(dòng)作一樣。

        go()與prev()函數(shù)庫程序會(huì)互相推翻,在回傳控制與WML 瀏覽之前都可以加以調(diào)用多次。

        只有最后的調(diào)用設(shè)定是會(huì)保持作用,如果最后的調(diào)用為go()或prew(),其所設(shè)定的url為空字符串(""),所有的要求都會(huì)被取消。

        這個(gè)程序回傳空字符串。

        參數(shù):無

        回傳值:字符串或invalid

        例外狀況:無

        范例:WMLBrowser.prev();

        newContext

        程序:newContext()

        說明:將目前WML瀏覽器的內(nèi)文清除并回傳一個(gè)空字符串,這個(gè)程序的公用與WML的NEWCONTEXT屬性一樣。

        參數(shù):無

        回傳值:字符串或invalid

        例外狀況:無

        范例:WMLBrowser.newContext();

        getCurrentCard

        程序:getCurrentCard()

        說明:回傳目前WML瀏覽器所處理card的最小相關(guān)URL,如果WML deck所包含目前程序的基本地址不同的話,則此程序會(huì)回傳絕對(duì)URL。

        參數(shù):無

        回傳值:字符串或invalid

        例外狀況:如果沒有目前的card,則回傳invalid。

        范例:var a=WMLBrowser.getCurrentCard();// a="deck#input"

        refresh

        程序:refresh()

        說明:強(qiáng)制WML瀏覽器更新它的內(nèi)文并回傳一個(gè)空字符串,而用戶界面會(huì)加以更新以反應(yīng)更新后的內(nèi)容,這個(gè)程序與WML中的refresh功能一樣。

        參數(shù):無

        回傳值:字符串或invalid

        例外狀況:無

        范例:WMLBrowser.setVar("name","Zorro");

        WMLBrowser.refresh();

        6.7 Dialog函數(shù)庫

        名稱:對(duì)話

        說明:這個(gè)函數(shù)庫包含典型的用戶界面程序。

        prompt

        程序:prompt(message,defaultInput)

        說明:顯示給予的信息message與用戶輸入的提示符號(hào),defaultInput參數(shù)包含了用戶輸入所需的初始內(nèi)文,回傳用戶輸入。

        參數(shù):message=字符串

        defaultInput=字符串

        回傳值:字符串或invalid

        例外狀況:無

        范例:var a="09-555 3456"; var b=Dialogs.prompt("Phome number";a);

        confirm

        程序:confirm(message,ok,cancel)

        說明:顯示所給予的信息message與兩個(gè)選項(xiàng):ok與cancel,等待用戶選取其中一個(gè),如果是ok則回傳false。

        參數(shù):message=字符串

        ok=字符串

        cancel=字符串

        回傳值:布爾值invalid

        例外狀況:無

        范例:function onAbort(){return Dialogs.confirm("Are you sure?"),"Yes","No";};

        alert

        程序:alert(message)

        說明:顯示所給予的信息message給用戶,等待用戶確定并回傳一個(gè)空字符串。

        參數(shù):message=字符串

        回傳值:字符串或invalid

        例外狀況:無

        范例:function testValue(textElement){

        if (String.length(textElement)>8) {

        Dialogs.alert("Enter name <8 chars!");

        };

        };

        6.8 函數(shù)庫總結(jié)

        函數(shù)庫

        函數(shù)庫名稱:

        Lang

        Float

        String

        URL

        WML Browser

        Dialogs

        函數(shù)庫與他們的程序:

        Lang函數(shù)庫

        Abs

        Min

        Max

        ParseInt

        ParseFloat

        IsInt

        IsFloat

        MaxInt

        MinInt

        Float

        Exit

        Abort

        Random

        Seed

        CharacterSet

        Float 函數(shù)庫

        Int

        Ploor

        Ceil

        Pow

        Round

        Sqrt

        MaxFloat

        MinFloat

        String 函數(shù)庫

        Length

        IsEmpty

        CharAt

        SubString

        Pind

        Replace

        Elements

        ElementAt

        RemoveAt

        ReplaceAt

        InsertAt

        Squeeze

        Frim

        Compqre

        ToString

        format

        URL 函數(shù)庫

        IsValid

        GetScheme

        GetHost

        GetPort

        GetPath

        GetParameters

        GetQuer

        GetFragment

        GetBase

        GetReferer

        Resolve

        EscapeString

        UnescapeString

        loadString

        WML Browse函數(shù)庫

        Get Var

        SetVar

        Go

        Prev

        NewContext

        GetCurrentCard

        Refresh

        Dialogs函數(shù)庫

        Prompt

        Confirm

        Alert

       

      分享:XMLHTTP 對(duì)象及其方法簡(jiǎn)介
      MSXML中提供了Microsoft.XMLHTTP對(duì)象,能夠完成從數(shù)據(jù)包到Request對(duì)象的轉(zhuǎn)換以及發(fā)送任務(wù)。 創(chuàng)建XMLHTTP對(duì)象的語句如下: Set objXML = CreateObject(Msxml2.XMLHTTP) 或 Set objXML = CreateObject(“Microsoft.XMLHTTP”) ' Or, for version 3.0 of XMLHTTP

      來源:模板無憂//所屬分類:Xml教程/更新時(shí)間:2010-04-18
      相關(guān)Xml教程