b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

IE中jscript/javascript的条件编译_javascript技巧

电脑杂谈  发布时间:2019-09-18 15:02:21  来源:网络整理

jscript script 文件_jscript语句_jscript语句

在IE中,有一个鲜为人知的功能叫做条件编译。自从IE4开始支持这个功能,它由于在一些Ajax相关的javascript脚本中发生而得到一些关注。条件编译成为一种独立方式的对象判断,使得IE可以按照预定义或客户定义的条件来决定你的jscript或javascript代码特定部分是否编译。也可以把它看成是你的代码的,使你的代码就能在非IE浏览上也成功运行。

通过在你的脚本中使用@cc_on来激活条件编译,或者直接使用@if或者@set等等成为CC逻辑中一部分的语句来唤醒它。这里是一个示范例子:

Language:javascript, parsed in: 0.007 seconds, using GeSHi 1.0.7.12

JScript 版本: 5.6.

JScript 版本 5.0+.

只有当浏览器支持JScript5+的之后你能够看见那些文字。

如果你使用IE(任何版本),你需要才能提到第一个document.write()的输出,如果是IE5+,接下来的两个document.write()你也无法看到(因为从IE5开始支持JScript 5)。最后一个document.write()方法是为了其它非IE5+浏览器服务的,无论是Firefox,opera,IE4,或者哪个别的。条件编译依赖于类似在条件注释中使用的注解标签jscript语句,以保证它在所有浏览器中都能工作顺畅。

当使用条件编译的之后,最好先借助@cc_on语句来激活它,只有这么你能够在你的脚本中包括注解标签以确保浏览器兼容,、就似乎里面举例中所显示的这样。(子乌注:这句英语我翻译的不是很顺...看起来似乎与前面的句子矛盾)

在这个奇怪的开场白之后,这里是一些用于条件利于的条件语句:

现在让我们看一些“古怪”的举例。

Language:javascript, parsed in: 0.001 seconds, using GeSHi 1.0.7.12

/*@cc_on

@if (@_win32)

document.write("操作系统是32位windows。浏览器是IE。");

@else

document.write("操作系统不是32位windows。浏览器是IE。");

@end

@*/

这是一段完整的脚本,只被ie浏览器所识别并忽视其它所有浏览器jscript语句,这段脚本在不同的操作系统上将显示不同的内容。对比一下下面这个示例……

Language:javascript, parsed in: 0.004 seconds, using GeSHi 1.0.7.12

/*@cc_on

/*@if (@_win32)

document.write("操作系统是32位windows。浏览器是IE。");

@else @*/

document.write("浏览器不是IE (如: Firefox)或者浏览器不是在32位windows下的IE。");

/*@end

@*/

熟练使用注解标签,这个示例中的else部分无法包括所有的非ie浏览器(如firefox),以及非32位windows下的IE。努力的研究这段注解,直到你脑子发昏,你才会知道这个逻辑了:)

继续吧,可以看全部内容了:

jscript script 文件_jscript语句_jscript语句

Language:javascript, parsed in: 0.001 seconds, using GeSHi 1.0.7.12

/*@cc_on

@if (@_jscript_version >= 5)

document.write("IE Browser that supports JScript 5+");

@elif (@_jscript_version >= 4)

document.write("IE Browser that supports JScript 4+");

@else

document.write("Very old IE Browser");

@end

@*/

Language:javascript, parsed in: 0.004 seconds, using GeSHi 1.0.7.12

/*@cc_on

/*@if (@_jscript_version >= 5)

document.write("IE Browser that supports JScript 5+");

@elif (@_jscript_version >= 4)

document.write("IE Browser that supports JScript 4+");

@else @*/

document.write("Non IE Browser (one that doesn't support JScript)");

/*@end

@*/

全面的处理。在这最后一个例子中,最后一个else子句包含了所有非IE浏览器。

在之前一部分中你看见了一些奇怪变量包括@_win32。这是一些你就能拿来判断IE或计算机大概叙述的预定义条件编译变量:

预定义的条件编译变量变量描述

@_win32

当运行在一个win32系统中时返回true, 否则返回 NaN.

@_win16

当运行在一个win16系统中时返回true , 否则返回 NaN.

@_mac

当运行在一个Apple的Macintosh系统中时返回 true , 否则返回 NaN.

jscript语句_jscript script 文件_jscript语句

@_alpha

当运行于DEC aplha处理器上时返回true ,否则返回 NaN.

@_x86

当运行于一个Intel处理上时返回true ,否则返回 NaN.

@_mc680x0

运行于Motorola 680x0处理器上时 true , 否则返回 NaN.

@_PowerPC

运行于Motorola PowerPC处理器上时 true , 否则返回 NaN.

@_jscript

永远返回 true.

@_jscript_build

JScript脚本引擎编译次数.

@_jscript_version

Jscript版本,以主要版本.次要版本格式展现.

IE4 支持JScript 3.x

IE5.x 支持 JScript 5.5-

IE6 支持 JScript 5.6

在JScript.net,这个版本数为7.x.

@_debug

如果编译于debug路径则返回 true ,否则返回false.

@_fast

如果编译于fast模式则返回 true ,否则返回false.

在大多数情况下,你或许只应该使用@_win和@jscript_build:

Language:javascript, parsed in: 0.001 seconds, using GeSHi 1.0.7.12

/*@cc_on

@if (@_win32)

document.write("OS is 32-bit. Browser is IE.");

@else

document.write("OS is NOT 32-bit. Browser is IE.");

jscript script 文件_jscript语句_jscript语句

@end

@*/

你也可以在条件编译块中定义你自己的函数,语法如下:

Language:javascript, parsed in: 0.001 seconds, using GeSHi 1.0.7.12

@set @varname = term

在条件编译中,数字与布尔类型的数组可以使用,但字符型无法使用。比如:

Language:javascript, parsed in: 0.002 seconds, using GeSHi 1.0.7.12

@set @myvar1 = 35

@set @myvar3 = @_jscript_version

在条件编译逻辑中才能使用标准的运算符:

你就能借助判断能否返回NaN来确认是否定义了一个用户自定义变量:

Language:javascript, parsed in: 0.002 seconds, using GeSHi 1.0.7.12

@if (@newVar != @newVar)

//该变量未定义

由于NaN是唯一一个不等于其自身的值,所以这段脚本无法正常运行。

在教程的起初,我以前提到条件编译怎么由于在一些Ajax的JavaScript中的发生而显示出它值得自夸的一面。现在我要告诉你我所指的内容。一个Ajax脚本一般包括一个中心函数用于判断浏览器(ie、ff等)对造成异步请求对象的支持:

Language:javascript, parsed in: 0.020 seconds, using GeSHi 1.0.7.12

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")

}

jscript script 文件_jscript语句_jscript语句

catch (e){}

}

}

else

return false

}

许认为try/catch语句才能成功的测试Ajax支持,很不幸,这不是真的。那些不支持throw/catch的浏览器,比如IE 4.x,实际上会阻塞后面这段代码并返回一个错误。为了摆脱这个难题,条件编译才能用来粗行减一个真正跨浏览器的友好的Ajax处理函数:

Language:javascript, parsed in: 0.008 seconds, using GeSHi 1.0.7.12

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...这个dicipher是哪个?“破译”这个解释是google到的,个人觉得翻译成“忽略”似乎更好?)。明显的Firefox会再次并使用XMLHttpRequest代替。现在你就受到了它--一个真正跨浏览器的ajax函数!(子乌注:在我翻译的此外一篇文章中,可以发现这个函数更全面的写法。)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-123297-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 王良士
        王良士

        可怜了我父母攒钱攒了一辈子到头来

      • 赵小颖
        赵小颖

        本来存银行1年能得10万*1

      • 周欢
        周欢

        以前最起码吃

      热点图片
      拼命载入中...