DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> WMLScript腳本程序設計
WMLScript腳本程序設計
編輯:XML詳解     
作為一種編輯語言,WMLScript提供了強大的函數、語句和庫功能,以及外部編輯、訪問控制等支持,同時對程序運行中可能產生的錯誤給出了檢測手段和具體的解決辦法。這些內容屬於WMLScript的腳本程序設計知識和進一步的編程規定,我們本章就對此進行詳細介紹。

  5.1 語句

  前面我們學習了變量、操作符和表達式,但僅由這些內容並不能完成某個完整的功能,因為他們不能形成完整的操作或處理程序。變量就如同與嚴重的單詞,表達式如語言中的詞組,他們都不能表達一個完整的意思;只有語句,是語言中完整的句子,能夠表達完整的意思並實現某個完整的功能。WML Script提供了豐富的語句功能,使用這些語句我們可以在WML的卡片中建立交互功能和其他需要的復雜功能。

  在WML Script中,每條語句的後面都需要以一個分號(;)結尾。為了養成嚴謹的編程風格,建議大家編寫腳本時,語句後一定要加上分號(;),這也有助於我們形成一種良好的編程習慣。

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

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

  5.1.1 基本語句

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

  空語句

  空語句用於定義一個空的程序行,它沒有任何標識符和操作符,也不執行任何操作。它只是以分號(;)結束。其語法格式為:

  ;

  顯然,空語句是一種十分特殊的語句。由是我們為了讓程序具有更好的可讀性,通常在程序中的適當地方加上幾個空語句,以起到分隔或突出的作用。例如,下面的幾行程序中就含有一個空語句:

  str="Hello";

  val=25;

  ;

  MyVal=val*val+5;

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

  再如,while語句用於判斷一個條件並在條件滿足的時候執行相應的任務,但如果希望條件滿足的時候什麼也不作,那麼就可以給它配上一個空語句,使之條件滿足的執行空操作:

  while(!poll(device));

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

  表達式語句

  表達式語句用於向變量賦值,或進行數學計算,或進行函數調用。表達式語句也是我們最常用的一種語句,語法格式為:

  表達式;

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

  str="Hey"+yourName;

  val3=prevVal+4

  counter++;

  myValue1=counter,myValue2=val3

  alert("Watch out!");

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

  塊語句

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

  {

  語句列表;

  }

  下面的簡單程序就是使用塊語句的例子:

  }

  vari=0;

  var x=Lang.abs(b);

  popUp("Remember!");

  }

  變量語句

  變量語句用於生命變量並可進行變量的初始化賦值。如果用戶不賦值,那麼WML Script會自動將變量語句生命的變量賦予一個空字符串("")。基本的語法格式為:

  var 變量名;

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

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

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

  var 變量名=初始化

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

  function count(stu){

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

  while(str!=""){

  var ind=0; //每次循環都初始化一次

  // 為退出循環,本塊語句內應當提供修改變量str值的語句

  };

  return result

  };

  function example(param){

  var a=0;

  if(param>a){

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

  }else{

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

  };

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

  };

  注釋語句

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

  注釋在程序執行的時候沒有任何作用,但是可以用於對程序進行解釋,則增強程序的可讀性。為了形成良好的編程風格,我們應該養成書寫注釋的良好習慣,注釋有兩種表達方式:

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

  例如,可以進行如下所示的注釋:

  //變量j用於小數每月的天數

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

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

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

  i用於描述每年中的月數,

  而j用於描述每月的天數*/

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

  return語句

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

  return表達式;

  下面的函數給出了應用return語句的例子:

  function square(x){

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

  return x*x

  };

  5.1.2 條件語句

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

  if(條件){

  代碼塊1

  }

  else{

  代碼塊2

  }

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

  if(條件){

  代碼塊

  }

  這樣,當條件滿足時,就執行代碼塊,如果條件不滿足則什麼也不做。

  例如,如果我們需要對一個學生的成績進行判定,如果大於等於60分,那麼我們就認為該學生成績合格了,反之則認為不合格,同時一並將狀態記錄到變量status種,相應的WMLScript語句如下所示:

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

  else status="fail";

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

  if(sunShines) {

  myDay="Good";

  goodDays++;

  }else

  myDays="Oh well...";

  5.1.3 循環語句

  使用循環語句可以反復執行某個代碼塊,直到循環結束條件滿足後才停止執行。WML Script中有兩種循環語句:for語句和while語句,同時還有兩終於循環密切相關的操作語言:break語句和continue語句。

  for語句

  for語句可以創建一個帶條件的循環,它還有3個可選的條件表達式,用於控制循環。這3個條件表達式放在一個括號裡,並以分號(;)間隔。for語句的一般語法形式如下:

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

  代碼塊

  }

  for語句的執行主要包括以下幾個步驟:

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

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

  (3)執行循環代碼。然後,在執行遞增表達式。一般情況下,我們在遞增表達式中對循環計數器進行處理,最後在返回步驟2執行。

  例如,下面的for語句建立了一個循環。初始表達式為定義變量index並付初值0,循環條件為index<100,遞增表達式為每循環一次index增加1。當index增加到100時候,循環結束。程序如下:

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

  count+=index;

  myFunc(count);

  };

  while 語句

  while語句也可常見一個循環,它的一般語法表達式如下:

  while(循環條件){

  代碼塊

  }

  while語句的執行過程包括以下幾個步驟:

  (1)判斷循環條件是否為真。如果循環條件為真,則執行循環;如果為假或為invalid,則跳出循環。

  (2)執行循環中的代碼塊,然後返回步驟(1)

  下面的程序就是使用while語句的簡單例子:

  var counter=0

  var total=0

  while(counter<3){

  counter++;

  total+=c;

  };

  其中建立的循環僅當變量counter的值小於3時執行,否則就結束循環。

  顯然,如果循環條件不能為假或為invalid,那麼while循環就會無休止的反復執行下去。因此,我們在代碼塊中一定要有能夠改變循環條件的變量,否則,就很有可能會陷入死循環而不能終止程序,下面就是一個死循環的例子:

  var x=1;

  var y=0;

  while(x<=1){

  y=x+1;

  }

  這個程序中,因為變量x的值在循環中不能發生變化,所以循環條件在判斷的時候永遠為真,所以成為了死循環。因此,對於while語句我們往往使用如下所示的語法形式:

  初始表達式

while(循環條件){

  代碼塊

  遞增表達式

  }

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

  程序如下:

  var index=0

  while (index<100){

  counter+=index;

  myFunc(count);

  index++;

  };

  break語句

  為了更好的解決死循環問題,WML Script項大多數編成語言一樣提供了break語句。break語句可以使程序執行跳出循環。不論是for語句還是while語句,只要在循環中使用了break語句,那麼程序執行到break語句後就立即跳出當前循環,然後繼續執行下去。

  break語句的予發行時如下:

  break;

  例如,在下面的函數中我們使用了break語句,它是當index=3時跳出循環。如果不是用該語句,函數中的while循環直到index=6時才可以結束。程序如下:

  funcition testBreak(x){

  var index=0;

  while(index<6){

  if(index==3)break;

  index++

  };

  retrun index*x;

  ;

  continue語句

  continue語句的功能和break語句的功能看起來有些類似,但實際上卻不一樣。循環執行時遇到break語句通常是跳出當前循環,但循環執行到continue語句並不跳出當前循環,而是不執行循環中在continue語句後面的代碼塊,直接結束循環的本輪運行,然後馬上開始下一輪循環的運行。

  在while語句的循環中,遇到continue語句後,程序會直接判斷循環條件從而開始下一輪循環。在for語句的循環中,遇到continue語句後程序會直接執行遞增表達式,然後判斷循環條件從而開始下一輪循環。

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

  var sum=0;

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

  if(j%2!=0)

  continue;

  sun+j;

  };

  在這個例子中,在j%2!=0的情況下,也就是j為奇數的情況下,程序執行continue語句,這時,並沒有如同break語句一樣跳出循環的運行,而是不執行循環中後面的語句而直接執行遞增表達式開始下一輪循環的執行,這樣,就可以不將其數j的之類即如總和中。

  再如,我們想利用while循環求0到4之間出3以外幾個數的和,則可以使用continue語句進行控制。程序如下;

  var index=0;

  var count=0;

  while (index<5){

  index++;

  if(index==3)

  continue;

  cont+=index;

  };

  這以程序中,當index等於3時,“index==3”為真,所以執行continue語句,不再把此時index的值加大count中,而是開始下一輪的循環。

  5.2 函數的聲明與調用

  在WML Script中,函數是一種能夠完成某種功能的代碼塊,並可以在腳本中被事件處理或被其他語句調用,也可以被WML程序所處理和調用。一般地,當我們編寫WML Script腳本時,如果腳本中的代碼長度還是很長,則一般還可以根據功能將函數再進行劃分,分成為幾個功能更加單一的函數。雖然說這樣對長代碼的處理方法並不是編寫腳本程序的強制性要求,但通過函數的劃分和運用,我們可以使得WML Script腳本具有更好的可讀性,也便於我們對腳本程序的編寫與調試。而且,如果在某些腳本中有多處完全相同的代碼塊,那麼我們也可以將這些代碼快些為一個函數,然後在腳本中調用這個函數,從而提高代碼的重要性,簡化代碼的編寫工作。

  WML Script的函數共用和Jave語言、C/C++語言的函數有所不同。我們知道,Jave語言、C/C++語言中有函數和過程之分,函數能夠完成一定的功能並有返回值,而過程進可完成一定的功能但沒有返回值。可是,WML Script中並不區分函數和過程,因為它只有函數,沒有過程。WML Script的函數完成一定功能後始終有返回值,不過返回值分兩種情況,即非空的返回值和空字符串("")形式的返回值。前者是真正的返回值,後者其實相當於沒有返回值。也就是說,WML Script中的函數同時具有其他語言中的函數和過程的功能。

  5.2.1 函數的聲明

  使用函數時,要根據函數的調用使用,而調用函數前必須聲明函數,也就是需要先定義函數。WML Script中定義函數的一般方式如下:

  function函數名(參數列表)

  {

  代碼塊

  };

  另外,WML Script規定使用extern關鍵字來聲明一個外部函數:

  extern function函數名(參數列表)

  {

  代碼塊

  };

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

  (1)函數名。即函數的名稱,其命名規則應遵守WML Script的標識規則。調用函數時都是通過函數名進行調用的,所以函數必須要有函數名。

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

  函數名在同一個WML Script腳本文件裡必須是唯一的。如若不然,則會導致函數定義混亂。

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

  調用函數的時候,參數個數和類型必須和函數定義示所聲明的參數個數即類型保持一致。而且函數的參數就如同似函數體內的局部變量,它們在函數調用的時候被初始化。

(3)代碼塊。它是函數的主體部分。代碼塊中的代碼包含在以對花括號({ })中,代碼塊可以執行並完成函數的功能。編寫代碼塊是應當遵循WML Script的編程規則。

  有時,函數需要返回一個值給調用函數的語句,則應該在代碼塊的後面一行使用return語句,返回所需的數值。

  與C/C++等語言類似,WML Script的函數是可以嵌套的,以就是說,在一個函數中還可以調用其他函數。但是,函數聲明是不能嵌套,這是WML Script的強制性規定。

  下面幾行語句就是定義函數的簡單例子:

  function currencyConverter(currency,ExchangeRate)

  {

  return currency*ExchangeRate;

  };

  其中,該函數的名稱為currencyConverter,參數有currency和exchangeRate兩個,函數代碼塊包含一條語句,用於返回currency和ExchangeRate的乘積。

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

  extern function testIt(){

  var USD=10;

  var FIM =currencyConverter(USD,5.3)

  };

  5.2.2 函數的調用

  編寫好的函數必須經過合法的調用,才可以發揮它應用的作用。函數調用將返回一個值,比如一個計算結果。WML Script中的函數主要可以分為內部函數、外部函數和庫函數,下面我們就介紹這3類函數的調用方法。

  內部函數

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

  內部函數可以在其定義之前調用,也可以在其定義之後調用。例如,下面就是一個在函數定義之後調用的例子。

  function test1(val){

  return val*val;

  };

  function test2(param){

  return test1(param+1);

  };

  這個例子中定義了兩個函數test1和test2。test1函數用於計算給定參數值的平方並將結果返回;test2函數將給定的參數值加1,然後這個和為參數值,來調用test1函數,得到結果後在將給結果返回到調用test2函數的語句。

  注意,本例中test2函數調用了test1函數,這種在函數中調用其他函數的方法稱為函數調用嵌套。WML Script的內部函數、外部函數和庫函數都支持嵌套調用,後面我們專門介紹這方面的內容。

  外部函數

  外部函數使一個在WML Scrupt外部文件中定義的函數。調用外部函數的方法與調用內部函數的方法基本類似,不同之處在於調用處外部函數時一是要指定外部文件的地址即名稱,二是要在調用的外部函數名的前面加上外部文件的名稱。

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

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

  這樣,WML Script的預編譯頭就可以將外部文件映射為一個可以在內部使用的標識。然後,使用這個標識並加上井號鍵(#)和標准的函數調用即可實現外部函數調用,語法格式為:

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

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

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

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

  OtherScript#testme(param+1);

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

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

  function test(param){

  return OtherScript#testme(param+1);

  };

  庫函數

  特別指定,WML Script的庫函數一律是指它的標准庫函數。因為與標准庫函數對應,WML Script還有一些非標准的庫函數。我們這裡先介紹標准庫函數,非標准庫函數後面再介紹。

  所有庫函數都有所數的庫,函數的庫中通常含有一類函數。因此,調用某個庫函數時,一要指定它的庫名,二要指定它的函數名。WML Script規定,調用標准庫函數時可以通過在函數庫的名字後面加上句點號(.)和庫函數的標准調用來實現,語法格式為:

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

  例如,WML Script的浮點庫即Float庫中有一個開根方的函數sqrt,該函數只有一個參數,那麼調用squrt庫函數的方法為:

  Float.sqrt(number);//這裡要求number大於或等於0

  下面給出了調用庫函數的簡單例子。首先一param參數值調用Lang.abs()函數,返回結果加1後再作為參數調用Float.sqrt()函數,它的返回結果作為內部函數test的返回值:

  function test(param){

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

  };

  2.3 函數的嵌套調用

  WML Script的函數定義都是互相平行、獨立的,定義函數的時候我們不能在一個函數內定義另外一個函數,也就是說,函數定義是不能嵌套的。但是,函數調用確是可以嵌套的,也就是說,我們可以在調用一個函數的過程中調用另外一個函數。

  它的執行過程是:

  (1)執行a函數開頭部分;

  (2)遇到調用b函數的操作語句,流程則專區執行b函數;

(3)執行b函數開頭部分;

  (4)遇到調用c函數的操作語句,流程則專區執行c函數;

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

  (6)返回調用c函數的語句,即返回到b函數;

  (7)繼續執行b函數中尚未執行的操作,直到b函數結束;

  (8)返回a函數中調用b函數的語句;

  (9)繼續執行a函數的剩余操作,直到函數結束。

  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 預編譯

  WML Script的預編譯主要用於在編譯階段控制編譯器的行為。與編譯頭一般在文件開頭和函數聲明之前指定,WML Script規定所有的預編譯頭都是一關鍵詞use加上指定的預編譯屬性進行指定。

  在大多數的編程中,我們比較長用的預編譯行為主要涉及外部文件聲明、訪問權和Meta信息設置。

  5.3.1 外部文件

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

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

  這樣,我們在當前文件的編程中就可以使用該預編譯頭聲明的外部文件,從而可以調用該外部文件的函數。其語法格式為:

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

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

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

  隨後,我們就可以在程序中調用OtherScript中的check()函數了:

  function test(par1,par2)

  {

  return OtherScript#check(par1,parr2);

  };

  其中調用執行的過程如下:

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

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

  (3)檢測外部文件的內容,並執行其中的check()函數。

  ure url 預編譯頭指定的外部文件名在當前程序中必須唯一,用戶不能指定不同URL地址的同名外部文件,否則在調用外部文件時就會發生混亂。

  另外,use url預編譯頭中的URL地址也可以是相對URL地址。相對URL的起始位置是當前程序文件所在的位置,並在此基礎上根據URL進行定位。

  如果URL地址中的字符包含有轉義字符,則WML Script將根據轉義要求進行轉義。不過,程序在編譯的時候編譯器並不會對他們進行轉義,而是在程序執行時完成,檢查URL格式和URL地址的有效性。

  5.3.2 訪問權限

  我們可以使用訪問權限預編譯設保護文件的內容,實現訪問控制。WML Script編程中,必須在調用外部函數之前使用訪問權限預編譯頭聲明外部文件的訪問權限。不過,WML Script訪問權限檢查的缺省值是不進行檢查,即disabled.但訪問權限一經聲明,以後當調用外部函數的時候,編譯器就會檢查外部文件的訪問權限,以決定調用這是否有權使用該文件及其內含函數。

  訪問權限預編譯頭的聲明方法是use Access,其語法格式如下:

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

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

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

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

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

  不過,為了簡化編程,有時WMLScript並不需要直到外部文件的絕對路徑,我們只需提供文件的相對URL即可,用戶浏覽器執行程序是卡相對路徑自動轉換為絕對路徑,根據路徑屬性進行匹配。例如:如果訪問權限預編譯頭及其指定屬性為:

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

  則可以使用以下的路徑來調用指定文件中的外部函數,它們都符合相對URL地址匹配規則:

  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

  而以下的路徑調用則非法的,因為它們或者操作域不對,或者URL地址不能與指定的相對URL相匹配:

  heep//www.test.Net/finance

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

  需要強調指出的是,WML Script規定,同一程序中只能定義一個訪問權限與編譯頭,否則就會導致編譯錯誤。

  5.3.3 Meta 信息

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

  usr meta 屬性 該屬性Meta信息:

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

  (1)Name。該屬性用於指定服務器使用的Meta信息。這些信息僅供服務使用,用戶浏覽器並不理會這些信息。

  例如,以下Name屬性的Meta信息指定了服務器的創建時間:

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

  該信息只會作用於服務器,而不會影響用戶浏覽器的操作。

  (2)HTTP Equiv。該屬性用於指定需要解釋為HTTP頭的Meta信息。對於已經編譯的文件來說,當它到達用戶浏覽器前,WML Script將根據HTTP Equiv屬性指定的Meta信息將文件轉換為WSP或HTTP的響應頭,進行文件的解釋和執行。

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

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

  (3)User Agent。該屬性用於定義用戶浏覽器使用的數據類型。例如:

  use meta user agent"Type""Test";

  它指定當前數據必須立即發送給用戶浏覽器,然後馬上清除掉。

  5.4 執行時的錯誤檢測與處理

  WML Script函數的功能提供用戶服務,並希望用戶界面能在任何的狀況下運作順利,因此錯誤的處理是最大的課題,這表示了語言可能不提供預期的機制,如他應該可以防止錯誤發生或提醒用戶注意並采取適當的動作,種植儲蓄執行是最後的手段。下面幾個小節列出了當為碼下載並執行時會發生的錯誤,一些程序上的錯誤並不在談論的范圍(如無窮循環),像這類的例子就需要手動來終止。

  5.4.1 錯誤檢測

  錯誤檢測工具能讓你檢測錯誤但會干擾系統的動作,因為WML Script是弱格式語言,所以由一些特殊功能的工具來檢測有invalid數據格式所引起的錯誤:

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

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

  5.4.2錯誤處理

  錯誤處理是在發生錯誤之後,有些狀況是錯誤檢測無法防止的,如內存限制後外部信號等,或者是數據很難處理,如溢出(overflow)或虧失(underflow),而這些狀況可以分為兩類:

  嚴重錯誤(fatalerror):這種錯誤會造成程序終止,因為WML Scritp程序會讓一些用戶界面調用,程序終止通常會跟調用它的用戶界面發出信號,用戶界面就會告知用戶這個錯誤。

  錯誤(non-fatalerrow):這種錯誤會把信號傳回程序,如一些特殊的值,然後由程序決定所要采取的行動。

  下列的錯誤是根據他們的嚴重性來區分。

  5.4.3 嚴重錯誤(fatalerror)

  下面的小節會討論WML Script的嚴重錯誤。

  位碼錯誤(bytedode error)

  這些錯誤跟位碼與由WML Script位碼解譯器所執行的指令有關他們指出了錯誤的元素群、無效的指令、指令所使用的參數無效,或指令無法執行。

  驗證錯誤(verification failed)

  說明:調用的程序中的特定位碼無法通過驗證。

  如何發生:每次程序試著用外部程序。

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

  嚴重性:嚴重。

  判定狀況:當檢測位碼驗證式。

  解決方法:終止程序與WML Script解譯其調用者的錯誤信號。

  說明:調用一個函數庫程序時發生嚴重錯誤。

  如何發生:每次調用函數庫程序。

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

  嚴重性:嚴重。

  判定狀況:無

  解決方法:終止程序與WML Script解譯其調用者的錯誤信號。

  說明:調用函數參數的數目跟被調用函數的參數數目不符合。

  如何發生:調用外部程序。

  范例:編譯器參生一個無效的參數給予指令使用,或者被調用的程序參數數目改變了。

  嚴重性:嚴重。

  判定狀況:無

  嚴重性:嚴重。

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

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

如何發生:調用外部程序。

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

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  說明: 由於在網絡服務器的程序存取又無法修復的錯誤或特定程序並不在網絡服務器中所引起的程序無法載入。

  如何發生:調用外部程序。

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

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  說明: 存取錯誤,所調用的外部程序加了保護。

  如何發生:調用外部程序

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

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  說明: 因為程序錯誤造成stack underflow。

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

  范例: 當組譯器產生錯誤碼。

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  說明:執行調用Lang.abort() 是發生的錯誤。

  如何發生:每當程序調用Lang.abort()函數。

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

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  說明:發生堆棧溢出。

  如何發生:程序資源太多或要推入太多的變量到運算之中。

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

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  說明:沒有多余的內存可供解譯器使用。

  如何發生:作業系統無法配置多余的空間給解譯器適使用。

  范例: function f(x){

  x=x+"abcdefghijklmnopqrstuvxyz";

  f(x) ;

  };

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

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

  如何發生:隨時。

  范例: 當應用程序正在執行是用戶按下reset鈕。

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  說明:當程序執行中,發生了外部嚴重的錯誤。

  如何發生:隨時。

  范例: 電力微弱,系統自動。

  嚴重性:嚴重。

  判定狀況:無

  解決方案:終止程序與WML Script解譯器調用著的錯誤信號。

  5.4.4 一般錯誤(Nonfatal error)

  下面說明了WML Script的一般錯誤:

  計算錯誤(computational error)

  這些錯誤是由於WML Script數學上的運算所造成。

  除以零(divide by zero)

  說明:發生了除以零的狀況

  如何發生:當程序中有除以零的狀況。

  范例:var a= 10;

  var b= 0;

  var x= a/b;

  var y= a div b;

  var z= a%b;

  a/=b;

  嚴重性: 一般。

  判定狀況:高

  解決方案:產生結果為invalid。

  說明:發生了除以零的狀況

  如何發生:程序要執行浮點數運算。

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

  var b = Float.precision();

  var c = a* b

  嚴重性:一般。

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

  解決方法:產生的結果為浮點數值0.0

  常數參考錯誤(constant reference error)

  說明:所參考的浮點數實字為not a number。

  如何發生:程序試著存取一個浮點數實字但組譯器產生了not a number的浮點數常數。

  范例:參考浮點數常數。

  嚴重性:一般。

  判定狀況:高

  解決方法:這會產生invalid值。

  說明:參考的浮點數實字不是正無窮大就是負無窮大的浮點數常數。

  如何發生:程序試著存取一個浮點數實字但組譯器產生了正無窮大或負無窮大的浮點數常數。

  范例:參考浮點數常數。

  嚴重性:一般。

  判定狀況:高

  解決方法:這會產生invalid值。

  說明:需要參照浮點數值所發生的錯誤。

  如何發生:程序需要使用浮點數值但環境值支持整數值。

  范例:var a = 3.14;

  嚴重性:一般

  判定狀況:高

  解決方法:這會產生invalid值。

  轉換錯誤

  這個錯誤的發生同WML Script所支持的自動轉換有關。

  說明:欲轉換成整數值,但這個值超過整數所能接受的范圍(正或負)。

  如何發生:程序試著自動轉換成整數時。

  范例: var a = -"99999999999999999999999999999999999999999";

嚴重性:一般

  判定狀況:高

  解決方法:這會產生invalid值。

  說明:欲轉換成浮點數,但這個值小於浮點數所能接受的范圍(正或負)。

  如何發生:程序時值自動轉換成浮點數時。

  范例:var a = -"99999999999999999999999999999999999999999";

  嚴重性:一般

  判定狀況:高

  解決方法:這會產生invalid值。

  說明:欲轉換成浮點數,但這個值小於浮點數所能接受的范圍(正或負)。

  如何發生:程序時值自動轉換成浮點數時。

  范例:var a = -"99999999999999999999999999999999999999999";

  嚴重性:一般

  判定狀況:高

  解決方法:這會產生浮點數0.0。

  6.5 URL函數庫

  名稱:URL

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

  isValid

  程序:isValid(url)

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

  絕對與相關URL都能支持

  相關URL不會被轉成絕對URL

  參數: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的調用方式scheme

  絕對與相關URL都能支持

  相關URL不會被轉成絕對URL

  參數: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的主機

  絕對與相關URL都能支持

  相關URL不會被轉成絕對URL

  參數: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沒有制定,則回傳空字符串

  絕對與相關URL都能支持

  相關URL不會被轉成絕對URL

  參數: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)

  參數: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)

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

  絕對與相關URL都能支持

  相關URL不會被轉成絕對URL

  參數: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)

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

  絕對與相關URL都能支持

相關URL不會被轉成絕對URL

  參數: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)

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

  絕對與相關URL都能支持

  相關URL不會被轉成絕對URL

  參數:url=字符串

  回傳值:字符串或invalid

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

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

  getBase

  程序:getBase()

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

  參數:無

  回傳值:字符串

  例外狀況:無

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

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

  getReferer

  程序:getReferer()

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

  內部程序調用並不會改變參照者

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

  參數:無

  回傳值:字符串

  例外狀況:無

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

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

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

  resolve

  程序:resolve(baseUrl,embeddedUrl)

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

  參數: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)

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

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

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

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

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

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

  給予的字符串如果已經是使用逃脫自負,則不會執行URL解析

  參數: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)

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

  參數: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)

  說明:回傳有所給予的絕對URL與contenttype所指出的內容。

  如果內容格是不是下列法則所規范的話,則是錯誤的:

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

  格式必須是正文,但次格式沒有限制,格式的開頭一定是"text/"。

  這個程序的動作如下:

  文件的內容會載入使用給予的contentType與url,其他所需的數形式有使用用戶界面的預設面。

  如果載入成功而且回傳的內為格式與所給予的contentType相符,則內文會被轉換成字符串再回傳。

  如果載入成功或回傳的內文格式不正確的話,則會回傳特定的錯誤碼。

  參數:url=字符串contentYype=字符串

  回傳值:字符串、整數或invalid

  例外狀況:如果載入失敗其回傳的錯誤碼和所使用的URL Scheme有關

  如果使用HTTP或WSP架構,會回傳HTTP錯誤碼。

  如果給予的contentType錯誤的話,則會回傳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)

  說明:回傳有所給予的絕對URL與contenttype所指出的內容。

  如果內容格是不是下列法則所規范的話,則是錯誤的:

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

  格式必須是正文,但次格式沒有限制,格式的開頭一定是"text/"。

  這個程序的動作如下:

  文件的內容會載入使用給予的contentType與url,其他內文所需的數形式有使用用戶界面的預設面。

  如果載入成功而且回傳的內容為格式與所給予的contentType相符,則內文會被轉換成字符串再回傳。

  如果載入成功或回傳的內文格式不正確的話,則會回傳特定的錯誤碼。

  參數:url=字符串

  contentYype=字符串

  回傳值:字符串、整數或invalid

  例外狀況:如果載入失敗其回傳的錯誤碼和所使用的URL Scheme有關

  如果使用HTTP或WSP架構,會回傳HTTP錯誤碼。

  如果給予的contentType錯誤的話,則會回傳invalid

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

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

  6.6 WML浏覽器函數庫

  名稱:WML Brower

  說明:這個函數庫所包含的程序是讓WML Script用來存取與WML相關的內文,這些程序不能有任何的副作用,並在下列的狀況下回傳invalid值。

  系統不支持WML浏覽器。

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

  getVar

  程序:getVar(name)

  說明:回傳目前浏覽器內文的所給予名稱name的變量值。

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

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

  參數:name=字符串

  回傳值:字符串或invalid

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

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

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

  setVar

  程序:setVar(name,value)

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

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

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

  參數:name=字符串

  value=字符串

  回傳值:布爾值或invalid

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

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

  go

  程序:go(url)

  說明:將給予的url所標記的內文載入,這個程序予WML的GO動作意思相同。

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

  go()與prev()函數庫程序會互相推翻,在回傳控制與WML浏覽之前都可以加以調用多次。

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

  這個程序回傳空字符串。

  參數:url=字符串

  回傳值:字符串或invalid

  例外狀況:無

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

  )

  prev

  程序:prev()

  說明:告訴WML浏覽器回到先前的WML Card,這個程序的功能與WML中的prev動作一樣。

  go()與prev()函數庫程序會互相推翻,在回傳控制與WML 浏覽之前都可以加以調用多次。

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

  這個程序回傳空字符串。

  參數:無

  回傳值:字符串或invalid

  例外狀況:無

  范例:WMLBrowser.prev();

  newContext

  程序:newContext()

  說明:將目前WML浏覽器的內文清除並回傳一個空字符串,這個程序的公用與WML的NEWCONTEXT屬性一樣。

  參數:無

  回傳值:字符串或invalid

  例外狀況:無

  范例:WMLBrowser.newContext();

  getCurrentCard

程序:getCurrentCard()

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

  參數:無

  回傳值:字符串或invalid

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

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

  refresh

  程序:refresh()

  說明:強制WML浏覽器更新它的內文並回傳一個空字符串,而用戶界面會加以更新以反應更新後的內容,這個程序與WML中的refresh功能一樣。

  參數:無

  回傳值:字符串或invalid

  例外狀況:無

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

  WMLBrowser.refresh();

  6.7 Dialog函數庫

  名稱:對話

  說明:這個函數庫包含典型的用戶界面程序。

  prompt

  程序:prompt(message,defaultInput)

  說明:顯示給予的信息message與用戶輸入的提示符號,defaultInput參數包含了用戶輸入所需的初始內文,回傳用戶輸入。

  參數:message=字符串

  defaultInput=字符串

  回傳值:字符串或invalid

  例外狀況:無

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

  confirm

  程序:confirm(message,ok,cancel)

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

  參數:message=字符串

  ok=字符串

  cancel=字符串

  回傳值:布爾值invalid

  例外狀況:無

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

  alert

  程序:alert(message)

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

  參數:message=字符串

  回傳值:字符串或invalid

  例外狀況:無

  范例:function testValue(textElement){

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

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

  };

  };

  6.8 函數庫總結

  函數庫

  函數庫名稱:

  Lang

  Float

  String

  URL

  WML Browser

  Dialogs

  函數庫與他們的程序:

  Lang函數庫

  Abs

  Min

  Max

  ParseInt

  ParseFloat

  IsInt

  IsFloat

  MaxInt

  MinInt

  Float

  Exit

  Abort

  Random

  Seed

  CharacterSet

  Float 函數庫

  Int

  Ploor

  Ceil

  Pow

  Round

  Sqrt

  MaxFloat

  MinFloat

  String 函數庫

  Length

  IsEmpty

  CharAt

  SubString

  Pind

  Replace

  Elements

  ElementAt

  RemoveAt

  ReplaceAt

  InsertAt

  Squeeze

  Frim

  Compqre

  ToString

  format

  URL 函數庫

  IsValid

  GetScheme

  GetHost

  GetPort

  GetPath

  GetParameters

  GetQuer

  GetFragment

  GetBase

  GetReferer

  Resolve

  EscapeString

  UnescapeString

  loadString

  WML Browse函數庫

  Get Var

  SetVar

  Go

  Prev

  NewContext

  GetCurrentCard

  Refresh

  Dialogs函數庫

Prompt

  Confirm

  Alert

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved