2012-04-09 51 views
1

我见过的几个网上的例子检测IE这个方法:这是如何检查工作?

if (/*@[email protected]*/false) { // check for Internet Explorer 

这是类似条件注释IE识别HTML?

+0

[JavaScript的?是什么/ * @ @ * /平均]的可能重复(http://stackoverflow.com/questions/7153746/javascript-what-does-mean) – Quentin 2012-04-09 12:00:28

+0

的http:// MSDN .microsoft.com/en-us/library/8ka90k2e(v = vs.85).aspx – 2012-04-09 12:01:16

回答

3

这种说法控制评论的conditional compilation任何代码在IE中的内容。如果IE看到这个评论,它实际上将评论块的内容编译为纯代码。现在这个窍门发生在评论中的!

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

1

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

它好像这个声明告诉脚本的浏览器是否会支持条件编译,如果是这样,则执行以下将被封闭在

/*@ ... 

... @*/ 
1

我们有一个很好的说明here

条件编译。

此方法是现在选择的方法。 Dean Edwards在他的博客文章Sniff中描述了这种方法的宝石。据我所知,它是检测IE的最干净和最可靠的方式。

var isMSIE = /*@[email protected]*/false; 

很简单,不是吗?没有用户代理,没有20行条件语句和字符串搜索。

此代码是如何工作的? Internet Explorer使用JScript,这是由微软开发的一种专有形式的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/*@[email protected]*/; 

,默认情况下它会返回'falsy'(null)。因此,非IE浏览器会将此行看作var isMSIE;而Internet Explorer的JScript会将其视为var isMSIE = 1; (分配1使变量'truthy')。

我更喜欢通过从isMSIE中删除MS来缩短它,使它简单地是isIE。注意:给布尔变量赋予一个暗示布尔变量代表什么的名字是一种最佳做法,通常采用准问题格式。使用普通的老式的IE浏览器并不告诉我们这个变量是一个布尔值,并且不会告诉我们布尔值的回答是什么问题。 var isIE确实。

var isIE/*@[email protected]*/; 
if(isIE){ 
    //Do something. I suggest downloading Firefox. ^_^ 
} 
+0

是的。 Firefox非常棒! – Fuser97381 2014-12-10 15:22:32

+0

我真的喜欢Firefox。 – Fuser97381 2015-04-10 13:55:50