Javascript /*@cc_on和IE6检测

Javascript /*@cc_on和IE6检测,javascript,internet-explorer,internet-explorer-6,conditional-comments,browser-feature-detection,Javascript,Internet Explorer,Internet Explorer 6,Conditional Comments,Browser Feature Detection,在研究IE的JavaScript条件注释时,我偶然发现了@cc_on。这似乎奏效了。但是,on conditional注释为更健壮的IE检测提供了以下代码,特别是IE6: /*@cc_on @if (@_jscript_version > 5.7) document.write("You are using IE8+"); @elif (@_jscript_version == 5.7 && window.XMLHttpRequest) d

在研究IE的JavaScript条件注释时,我偶然发现了@cc_on。这似乎奏效了。但是,on conditional注释为更健壮的IE检测提供了以下代码,特别是IE6:

/*@cc_on
    @if (@_jscript_version > 5.7)
    document.write("You are using IE8+");

    @elif (@_jscript_version == 5.7 && window.XMLHttpRequest)
    document.write("You are using IE7");

    @elif (@_jscript_version == 5.6 || (@_jscript_version == 5.7 && !window.XMLHttpRequest))
    document.write("You are using IE6");

    @elif (@_jscript_version == 5.5)
    document.write("You are using IE5.5");

    @else
    document.write("You are using IE5 or older");

@end

@*/
问题是,
上出现了一个“预期常量”javascript错误!window.XMLHttpRequest


显然,维基百科需要一些帮助,我需要让它工作起来。有人能帮我吗?

肯定没有JS专家,但一些搜索发现使用jscript_version==5.7将IE6与IE7隔离:

/*@cc_on
if (@_jscript_version==5.6 ||
   (@_jscript_version==5.7 &&
      navigator.userAgent.toLowerCase().indexOf("msie 6.") != -1)) {
  //ie6 code
}
@*/
也许它会给你指明正确的方向

资料来源:
我找到了解决办法。代码如下

<script type="text/javascript" charset="utf-8">
/*@cc_on
if (@_jscript_version > 5.7)
 document.write("You are using IE8");
else if (@_jscript_version == 5.7 && window.XMLHttpRequest)
 document.write("You are using IE7");
else if (@_jscript_version == 5.6 || (@_jscript_version == 5.7 && !window.XMLHttpRequest))
 document.write("You are using IE6");
else if (@_jscript_version == 5.5)
 document.write("You are using IE5.5");
else
 document.write("You are using IE5 or older");
@*/
</script>

/*@抄送
如果(@_jscript_版本>5.7)
写下(“您正在使用IE8”);
else if(@_jscript_version==5.7&&window.XMLHttpRequest)
写下(“您正在使用IE7”);
如果(@_jscript_version==5.6 | |(@_jscript_version==5.7&&!window.XMLHttpRequest))
写下(“您正在使用IE6”);
如果(@_jscript_version==5.5),则为else
写下(“您正在使用IE5.5”);
其他的
写下(“您正在使用IE5或更早版本”);
@*/

多年来,我一直在使用这款漂亮的单衬里:

var IE; //@cc_on IE = parseFloat((/MSIE[\s]*([\d\.]+)/).exec(navigator.appVersion)[1]);
小而准确(在IE 6-10中测试)


注意那些使用咕噜的人。如果您使用
uglify
插件来确保条件注释不会被删除,请务必设置PreserveComents:“some”。

参加聚会可能有点晚,但我也遇到了这个问题,对此进行了一次尝试,我的解决方案如下,希望能有所帮助

var-isIE=false;
/*@cc_on isIE=@_jscript_版本@*/
如果(isIE!==false){
如果(isIE==5.8)
isIE=8;
else if(isIE==5.7&&window.XMLHttpRequest)
isIE=7;
否则如果(isIE==5.7 | | isIE==5.6)
isIE=6;

else if(isIE)我想澄清一下,但你说得很对。问题是,试图在预编译的条件注释操作符“@elif”中调用普通JavaScript等等。当您只是预编译jscript版本,并以传统JavaScript运行其他所有内容时,一切都可以正常编译和运行。@Marcel Korpel-您读过我的博客文章JBickford所指的内容吗?userAgent检查在条件编译块中使用(因此仅适用于IEs)没有其他方法可以确定IE7和IE6之间的区别,IE7有jscript 5.7,IE6在Windows XP SP3上也有jscript 5.7。@维塔利:我必须承认我没有读过你的文章,我的原始评论有点苛刻,为此我道歉(我删除了评论)。您可以在条件编译块中安全地检测IE版本(这就足够了,也不需要检查JScript版本),并且需要浏览器检测来检查
:hover
可能性(据我所知,它们无法检测),但我认为使用条件注释是一种更简洁的方法。也就是说,在大多数情况下,您可以而且应该只使用功能检测。@Marcel仅检查条件编译块中的navigator.userAgent字符串显然是不够的,因为IE6可以同时具有5.6版和5.7版的jscript(安装XPSP3时)。因此,如果@U jscript_版本返回5.7,则必须同时检查@U jscript_版本和navigator.userAgent。并且无法将IE6、jscript 5.6或5.7与条件注释区分开来-[如果IE 6]将由两者进行分析。功能检测在大多数情况下都可以,但在某些情况下,对于最模糊的错误,您只需要知道jscript和trident的确切版本。@Vitaly:我同意您的看法,如果您需要特定功能或要解决涉及jscript的错误,您需要查找jscript版本。然而,最初的问题是是关于检测IE 6的。你瞎了吗?这是他在问题中包含的同一段代码。嗨,Josh,我将@if…@elif…@else…@end更改为if…@else if…。我在@if…@elif…@else…@end中发现一些代码无法正确执行,例如window.XMLHttpRequest部分。但它在正常的if语句中运行良好。“更健壮的IE检测"?我认为条件注释提供了最可靠的IE检测形式。不要依赖JScript版本来确定IE版本,因为它们是独立的。此外,请参见第4点,您根本不应该使用浏览器检测;使用功能检测:@_JScript_版本检测应该只在您知道确切区别的情况下使用在jscript引擎的不同版本之间,您希望以某种方式针对这种差异-例如,模拟缺少的功能。例如,jscript 5.1没有定义函数的原型调用/应用方法,也没有定义Array.prototype.push。因此,检测此@u jscript_版本并为这些功能添加编程支持是安全的。However,正如Marcel所说,假设5.1版本的jscript映射到IE5.01是不安全的,因为您可以很容易地从Windows Update更新jscript。@Vitaly:我不想吹毛求疵,但您给出的示例可以通过功能检测进行测试,因此您不必测试Javascript版本>=1.3或其他版本。只需使用
如果(!Function.prototype.call){Function.prototype.call=foo;}
,等等,就像Oz.js一样:我意识到这已经过时了,但我在需要做一些旧的浏览器检测时偶然发现了这一点。仅供参考,在上面的调用中,您应该使用typeof操作符来避免出现错误。这不是我专门测试IE6的方式,而是我说的仅供参考你的代码应该是..
if(typeof window.XMLHttpRequest==“undefined”){/*code here*/}
你在哪里找到这个漂亮的一行代码的?@yckart我写的。你可以在那里看到我的最新版本,包括chromeframe检查(由于chrome名声不再保持,2014年1月将不需要)。
var isIE = false;
/*@cc_on isIE = @_jscript_version;@*/
if (isIE !== false) {
   if (isIE == 5.8)
       isIE = 8;
   else if (isIE == 5.7 && window.XMLHttpRequest)
       isIE = 7;
   else if (isIE == 5.7 || isIE == 5.6)
       isIE = 6;
   else if (isIE <= 5.5)
       isIE = 5;
}