我见过的几个网上的例子检测IE这个方法:这是如何检查工作?
if (/*@[email protected]*/false) { // check for Internet Explorer
这是类似条件注释IE识别HTML?
我见过的几个网上的例子检测IE这个方法:这是如何检查工作?
if (/*@[email protected]*/false) { // check for Internet Explorer
这是类似条件注释IE识别HTML?
这种说法控制评论的conditional compilation任何代码在IE中的内容。如果IE看到这个评论,它实际上将评论块的内容编译为纯代码。现在这个窍门发生在评论中的!
。
IE将!
编译为源代码,因此它将代码处理为if (!false)
,而所有其他浏览器将其视为if (false)
。
我们有一个很好的说明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. ^_^
}
是的。 Firefox非常棒! – Fuser97381 2014-12-10 15:22:32
我真的喜欢Firefox。 – Fuser97381 2015-04-10 13:55:50
[JavaScript的?是什么/ * @ @ * /平均]的可能重复(http://stackoverflow.com/questions/7153746/javascript-what-does-mean) – Quentin 2012-04-09 12:00:28
的http:// MSDN .microsoft.com/en-us/library/8ka90k2e(v = vs.85).aspx – 2012-04-09 12:01:16