條件編譯變量
在之前一部分中你看到了一些奇怪變量比如@_win32。這是一些你能夠用來(lái)判斷IE或計(jì)算機(jī)大致描述的預(yù)定義條件編譯變量:
在大多數(shù)情況下,你也許只需要使用@_win和@jscript_build:
/*@cc_on @if (@_win32) document.write("OS is 32-bit. Browser is IE."); @else document.write("OS is NOT 32-bit. Browser is IE."); @end @*/
用戶自定義變量
你也可以在條件編譯塊中定義你自己的變量,語(yǔ)法如下:
@set @varname = term
在條件編譯中,數(shù)字(Numeric)與布爾(Boolean)類(lèi)型的變量可以使用,但字符型(String)無(wú)法使用。比如:
@set @myvar1 = 35 @set @myvar3 = @_jscript_version
在條件編譯邏輯中能夠使用標(biāo)準(zhǔn)的運(yùn)算符:
! ~ * / % + - << >> >>> < <= > >= == != === !== & ^ | && |
你能夠通過(guò)判斷是否返回NaN來(lái)確定是否定義了一個(gè)用戶自定義變量:
@if (@newVar != @newVar) //該變量未定義
由于NaN是唯一一個(gè)不等于其自身的值,所以這段腳本能夠正常運(yùn)行。
條件編譯示例--try catch語(yǔ)句
在教程的開(kāi)始,我曾經(jīng)提及條件編譯如何由于在一些Ajax的JavaScript中的出現(xiàn)而顯示出它值得自夸的一面,F(xiàn)在我要告訴你我所指的內(nèi)容。一個(gè)Ajax腳本通常包含一個(gè)中心函數(shù)用于判斷瀏覽器(ie、ff等)對(duì)產(chǎn)生異步請(qǐng)求對(duì)象的支持:
典型的ajax函數(shù):
function HttpRequest(url, parameters){ var pageRequest = false //variable to hold ajax object if (window.XMLHttpRequest) // if Mozilla, Safari etc pageRequest = new XMLHttpRequest() else if (window.ActiveXObject){ // if IE try { pageRequest = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ try{ pageRequest = new ActiveXObject("Microsoft.XMLHTTP") } catch (e){} } } else return false }
許多人認(rèn)為try/catch語(yǔ)句能夠順利的測(cè)試Ajax支持,很不幸,這不是真的。那些不支持throw/catch的瀏覽器,比如IE 4.x,實(shí)際上會(huì)阻塞上面這段代碼并返回一個(gè)錯(cuò)誤。為了克服這個(gè)問(wèn)題,條件編譯能夠用來(lái)粗行減一個(gè)真正跨瀏覽器的友好的Ajax處理函數(shù):
真正的跨瀏覽器函數(shù):
function HttpRequest(url, parameters){ var pageRequest = false //variable to hold ajax object /*@cc_on @if (@_jscript_version >= 5) try { pageRequest = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ try { pageRequest = new ActiveXObject("Microsoft.XMLHTTP") } catch (e2){ pageRequest = false } } @end @*/
if (!pageRequest && typeof XMLHttpRequest != 'undefined') pageRequest = new XMLHttpRequest() }
使用條件編譯,完整的try/catch塊只用于IE5+, 其余的瀏覽器,比如IE4或非IE瀏覽器則試著破譯它(dicipher it...這個(gè)dicipher是什么?“破譯”這個(gè)解釋是google到的,個(gè)人感覺(jué)翻譯成“忽略”似乎更好?)。明顯的Firefox會(huì)繼續(xù)并使用XMLHttpRequest代替,F(xiàn)在你就得到了它--一個(gè)真正跨瀏覽器的ajax函數(shù)。ㄗ訛踝ⅲ涸谖曳g的另外一篇文章中,可以看到這個(gè)函數(shù)更全面的寫(xiě)法。)
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁(yè) IE中jscript/javascript的條件編譯 [1] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)頁(yè)制作、網(wǎng)站綜合版塊參加討論
|