WMLScript的URL庫包含一系列與絕對URL地址和相對URL地址操作相關(guān)的函數,利用它們可以實(shí)現對外部文件、外部函數等外部資源的合法調用。URL庫函數主要包括escapeString、getBase、getFragment、getHost、getScheme、getPath、getPort、getQuery、getReferer、getParameters、isValid、loadString、resolve和unescapeString,本節我們就講解這些庫函數的功能和用法。
9.4.1 isValid函數
isValid函數用于判斷給定URL地址的格式是否正確。如果URL地址合法,則該函數會(huì )返回true,否則返回false。isValid函數可以判斷絕對和相對URL地址的格式,判斷時(shí)相對URL不必轉化為絕對URL,而是可以直接判斷。isValid函數的語(yǔ)法格式為:
URL.isValid(url)
它的參數url是字符串形式的URL地址,返回值為布爾型的true|false。如果給出的參數內容不符合要求,則isValid函數會(huì )返回無(wú)效值invalid。
WMLScript中合法的URL地址格式為:
<scheme>://<host>:<port>/<path>;<params>?<query>#<fragment>
凡不符合該格式的URL地址,isValid函數均會(huì )判斷其為false或invalid。
下面我們給出使用isValid函數判斷URL地址的幾個(gè)例子:
var a = URL.isValid("http://w.acmhst.com/script#func( )"); // a = true
var b = URL.isValid("../common#test( )"); // b = true
var c = URL.isValid("experimental?://www.host.com/cont"); // c = false
9.4.2 getScheme函數
getScheme函數用于尋找并返回給定URL地址中的Scheme部分。如果給定URL地址中沒(méi)有Scheme部分,則該函數返回空字符串。如果給定的URL地址無(wú)效,則會(huì )返回invalid。getScheme函數也支持絕對和相對URL地址,操作時(shí)也不會(huì )把相對URL地址轉化為絕對URL地址,而是可以直接操作。該函數的語(yǔ)法格式如下:
URL.getScheme(url)
它的參數url必須是字符串形式的URL地址。下面是使用getScheme函數的幾個(gè)例子:
var a = URL.getScheme("http://w.h.com/path#frag"); // a = "http"
var b = URL.getScheme("w.h.com/path#frag"); // b = ""
var c = URL.getScheme("http://www.mywap.com/script#func( )"); // c = "http"
9.4.3 getHost函數
getHost函數用于獲取并返回給定URL地址中的主機名,即Host部分。如果URL地址中沒(méi)有給出主機名,則該函數返回空字符串。getHost函數也支持絕對和相對URL地址,操作時(shí)也不進(jìn)行相對URL地址向絕對URL地址的轉換。getHost函數的語(yǔ)法格式為:
URL.getHost(url)
它的參數url必須為字符串形式的URL地址,返回值為字符串型的主機名。如果getHost函數無(wú)法解析給出的URL地址,那么它將返回無(wú)效值invalid。
使用getHost函數的例子如下:
var a = URL.getHost("http://w.h.com/path#frag"); // a = "w.h.com"
var b = URL.getHost("path#frag"); // b = ""
var c = URL.getHost("http://www.mywap.com/script#func( )"); // c = "www.mywap.com"
9.4.4 getPort函數
getPort函數用于獲取并返回給定URL地址中的通信端口號,即port部分。如果URL地址中沒(méi)有給出端口號,則該函數返回空字符串。getPort函數也支持絕對和相對的URL地址,操作時(shí)無(wú)需轉換相對URL地址為絕對URL地址。它的語(yǔ)法格式為:
URL.getPort(url)
它的參數url取值應為字符串形式的URL地址,函數返回值為字符串形式的端口號。如果URL地址中的端口號無(wú)法被getPort函數所解析,那么該函數就會(huì )返回無(wú)效值invalid。
getPort函數的使用十分簡(jiǎn)單,下述幾條語(yǔ)句就是用它來(lái)獲取端口號的例子:
var a = URL.getPort("http://w.h.com:80/path#frag"); // a = "80"
var b = URL.getPort("http://www.mywap.com/path#frag"); // b = ""
var c = URL.getPort("http://www.mywap.com:8080/script#func( )"); // c = "8080"
9.4.5 getPath函數
用于獲取和返回給定URL地址中的路徑(path)部分。如果URL地址中沒(méi)有給出路徑,那么該函數就會(huì )返回空字符串。getPath函數也支持絕對和相對的URL地址,操作時(shí)不必將相對URL地址轉化為絕對URL地址。它的語(yǔ)法格式為:
URL.getPath(url)
它的參數url取值也應為字符串形式的URL地址,函數返回值為字符串形式的路徑。如果getPath函數無(wú)法解析URL地址中的路徑,那么就會(huì )返回無(wú)效值invalid。
var a = URL.getPath("http://www.mywap.com/home/sub/comp#frag");
// 返回的路徑為a = "/home/sub/comp"
var b = URL.getPath("../home/sub/comp#frag"); // 返回的路徑為b = "../home/sub/comp"
var c = URL.getPath("http://www.mywap.com:8080/program/WML/Script/script#func( )");
// 返回的路徑為c = "/program/WML/Script/script"
9.4.6 getParameters函數
getParameters函數用于獲取和返回給定URL地址中的參數部分,即params部分。如果URL地址中沒(méi)有指定相關(guān)參數(params),那么函數就會(huì )返回空字符串。該函數也同時(shí)支持絕對和相對的URL地址,操作相對URL地址無(wú)需將它轉化為絕對URL地址。getParameters函數的語(yǔ)法格式如下:
URL.getParameters(url)
它的參數url取值也應為字符串形式的URL地址,函數返回值為字符串形式的參數(params)。如果給定的URL地址無(wú)效,則getParameters函數返回無(wú)效值invalid。
作為舉例,我們給出使用getParameters函數獲取參數的例子:
var a = URL.getParameters("http://www.waphome.com/script;3;2?x=1&y=3"); // a = "3;2"
var b = URL.getParameters("../script;3;2?x=1&y=3"); // b = "3;2"
var c = URL.getParameters("http://www.mywap.com:8080/script#func( )"); // c = ""
9.4.7 getQuery函數
getQuery函數用于獲取和返回給定URL地址中的query部分。如果URL地址中沒(méi)有query部分,則函數返回空字符串。該函數也同時(shí)支持絕對和相對的URL地址,操作時(shí)相對URL地址不必轉化為絕對URL地址。getQuery函數的語(yǔ)法格式為:
URL.getQuery(url)
它的參數url取值應為字符串形式的URL地址,函數返回值為字符串形式的query部分。如果給定的URL地址無(wú)效,則getQuery函數返回無(wú)效值invalid。
例如,下面就是使用getQuery函數的例子:
var a = URL.getQuery("http://www.waphome.com/script;3;2?x=1&y=3"); // a = "x=1&y=3"
var b = URL.getQuery("../script;3;2?x=1&y=3"); // b = "x=1&y=3"
var c = URL.getQuery("http://www.mywap.com:8080/script#func( )"); // c = ""
9.4.8 getFragment函數
用于獲取和返回給定URL地址中的fragment部分。如果其中沒(méi)有fragment部分,則函數返回空字符串。getFragment函數也支持相對和絕對的URL地址,并且操作時(shí)相對的URL也不進(jìn)行絕對URL的轉換。getFragment函數的語(yǔ)法格式如下:
URL.getFragment(url)
它的參數url應取字符串形式的URL地址,函數返回值為字符串形式的fragment部分。如果給定的URL地址無(wú)效,則getFragment函數返回無(wú)效值invalid。
使用getFragment函數獲取fragment部分的例子如下:
var a = URL.getFragment("http://www.waphome.com/cont#frag"); // a = "frag"
var b = URL.getFragment("../script;3;2?x=1&y=3"); // b = ""
var c = URL.getFragment("http://www.mywap.com:8080/script#func( )"); // c = "func( )"
9.4.9 getBase函數
getBase函數用于獲取和返回當前WMLScript文件的不含fragment部分的絕對URL地址。它沒(méi)有參數,返回值為字符串形式的絕對URL地址。其語(yǔ)法格式為:
URL.getBase( )
例如,當前測試的WMLScript文件位于服務(wù)器www.host.com的test目錄中,則使用如下的getBase函數測試時(shí),可返回結果a = "http://www.host.com/test":
var a = URL.getBase( ); // 結果為a = "http://www.host.com/test"
9.4.10 getReferer函數
getReferer函數用于獲取和返回調用當前WMLScript文件的最小的相對URL地址。如果文件調用時(shí)沒(méi)有指定URL地址,那么該函數返回空字符串。其語(yǔ)法格式為:
URL.getReferer( )
它沒(méi)有參數,返回值為字符串形式的相對URL地址。
例如,調用的當前WMLScript文件位于服務(wù)器www.host.com的test目錄中,文件名為app.wml,則使用getReferer函數測試時(shí)則可返回結果referer = "app.wml":
var referer = URL.getReferer(); // 結果為referer = "app.wml"
9.4.11 resolve函數
resolve函數根據給定的baseUrl和embeddedUrl兩個(gè)URL地址的參數值,組合生成一個(gè)絕對URL地址,并返回該地址。如果參數embeddedUrl的值已經(jīng)是一個(gè)絕對的URL地址,則函數直接把embeddedUrl的值作為結果返回。resolve函數的語(yǔ)法格式如下:
URL.resolve(baseUrl, embeddedUrl)
它的兩個(gè)參數baseUrl和embeddedUrl都是字符串形式的URL地址,返回值結果也為字符串形式的URL地址。如果參數不合法,則函數返回無(wú)效值invalid。
下面就是應用resolve函數合成一個(gè)有效的絕對URL地址的例子:
var a = URL.resolve("http://foo.com/","foo.vcf"); // 結果為a = "http://foo.com/foo.vcf"
9.4.12 escapeString函數
escapeString函數的功能是把給定字符串string里面的特殊字符進(jìn)行轉義序列的重新編碼處理。這種字符即WML和WMLScript中所指的轉義字符,包括ASCII碼中的控制字符和空格,以及一些保留字作用的特殊符號:";"、"/"、"?"、":"、"@"、"&"、"="、"+"、"$"、","、"{"、"}"、"|"、"\"、"^"、"["、"]"、"‘"、"<"、">"、"#"、"%"、"""等。
escapeString函數的語(yǔ)法格式為:
URL.escapeString(string)
它僅對所給URL地址中的轉義字符進(jìn)行轉換,而不進(jìn)行URL地址的解析和定位。如果URL地址中包含了無(wú)法進(jìn)行轉換的無(wú)效字符,則函數返回無(wú)效值invalid。
例如,使用escapeString函數進(jìn)行下述轉換處理時(shí),我們可以得到a = "http%3a%2f%2fw.h.com%2fdck%3fx%3d%7f%23crd"的轉換結果:
var a = URL.escapeString("http://w.h.com/dck?x=\u007f#crd");
// 結果為a = "http%3a%2f%2fw.h.com%2fdck%3fx%3d%7f%23crd"
9.4.13 unescapeString函數
與escapeString函數的作用相反,unescapeString函數可以將給定的轉義字符串string進(jìn)行還原。而且是只做字符的轉換處理,不對URL地址進(jìn)行其他任何解析處理。unescapeString函數的語(yǔ)法格式為:
URL.unescapeString(string)
轉義字符還原后,unescapeString函數返回的結果是字符串形式的URL地址。如果轉義字符串string中包含了不合法的轉義字符,該函數返回無(wú)效值invalid。
例如,下面我們給出了已經(jīng)轉義的字符串a(chǎn),利用unescapeString函數對它進(jìn)行還原后,可以得到原來(lái)的URL地址:
var a = "http%3a%2f%2fw.h.com%2fdck%3fx%3d12%23crd";
var b = URL.unescapeString(a); // 結果為b = "http://w.h.com/dck?x=12#crd"
9.4.14 loadString函數
該函數用于獲取和返回一個(gè)由給定參數url與contentType所代表的內容形式,其語(yǔ)法格式為:
URL.loadString(url, contentType)
其中參數url是給定的字符串形式的絕對URL地址,參數contentType是給定的字符串形式的擬采用的內容類(lèi)型。
特別地,給定的contenttype必須遵循下述規則,否則會(huì )導致錯誤。
(1) 只能指定一個(gè)cnotenttype。即整個(gè)字符串只允許有一個(gè)內容類(lèi)型(contenttype),并且不能有多余的前綴和后綴。
(2) 類(lèi)型必須是text,但是子類(lèi)型可以是其他的類(lèi)型。因此,類(lèi)型的前綴必須是"text/"。
loadString函數的運行行為是這樣的:首先裝入指定的contenttype和url,同時(shí)將其他缺省的屬性也一并裝入進(jìn)來(lái),然后根據裝入情況進(jìn)行相應處理。如果裝入成功,則返回符合給定contenttype的內容,并且將content轉換為字符串。如果裝入失敗,或者返回的content內容是錯誤的,那么就返回一個(gè)指定的錯誤代碼。如果使用HTTP或WSP協(xié)議,則返回HTTP的錯誤代碼。
如果用戶(hù)給定的是一個(gè)無(wú)效的contenttype,那么loadString函數就會(huì )返回無(wú)效值invalid。
下面的簡(jiǎn)單例子給出了使用loadString函數的一般方法:
var myUrl = "http://www.host.com/vcards/myaddr.vcf";
myCard = URL.loadString(myUrl, "text/x-vcard");