这怎么检查工作?

时间:2012-04-09 11:56:10

标签: javascript

我在几个在线示例中看到了这种检测IE的方法:

if (/*@cc_on!@*/false) { // check for Internet Explorer

这类似于IE在HTML中识别的条件注释吗?

3 个答案:

答案 0 :(得分:3)

此语句控制IE中评论内容的conditional compilation。如果IE看到此注释,它实际上将注释块的内容编译为纯代码。现在诀窍发生在评论中的!

IE编译!,好像它已写入源代码,因此它将代码处理为if (!false),而所有其他浏览器则将其视为if (false)

答案 1 :(得分:1)

Microsoft提供了一些有用的见解。

似乎这个声明告诉脚本浏览器是否支持条件编译,如果是,那么执行后面的任何代码将包含在

/*@  ...

... @*/

答案 2 :(得分:1)

我们有一个很好的描述here

条件编译。

此方法现在是首选方法。 Dean Edwards在他的博客Sniff上描述了这种方法的宝石。据我所知,这是检测IE的最干净,最可靠的方法。

var isMSIE = /*@cc_on!@*/false;
简单,不是吗?没有用户代理,没有20行条件语句和字符串搜索。

此代码如何工作? Internet Explorer使用JScript,这是Microsoft开发的一种专有形式的JavaScript(ECMAScript)。 JScript有一个名为条件编译的功能,它允许我们在特殊格式的注释中添加特定于JScript的JavaScript。其他JavaScript编译器将忽略此代码,认为它是一个注释,而JScript将识别它并处理它。

/ * @ cc_on开始评论,@ * /结束评论。

当任何非IE浏览器看到var isMSIE = / * @ cc_on!@ * / false;时,它实际上将其视为var isMSIE = false;。 Internet Explorer的JScript将添加注释中包含的感叹号,这意味着IE将看到var isMSIE =!false;。请记住,感叹号会反转布尔值,因此!false等于true。

正如迪恩指出的那样,有一种更简单的方法可以写出来(尽管它略显清晰):

var isMSIE/*@cc_on=1@*/;

如果变量在声明时未赋值,则默认返回'falsy'(null)。因此,非IE浏览器会将此行视为var isMSIE;而Internet Explorer的JScript会将其视为var isMSIE = 1; (指定1使变量'truthy')。

我更喜欢通过从isMSIE中删除MS来缩短它,使它简直就是isIE。注意:最好的做法是给布尔一个名称,该名称暗示布尔代表的含义,通常采用准问题格式。使用普通的旧的IE IE并没有告诉我们变量是一个布尔值,并没有告诉我们布尔值的回答是什么问题。 var isIE。

var isIE/*@cc_on=1@*/;
if(isIE){
   //Do something. I suggest downloading Firefox.  ^_^
}