IE版本在javascript中没有条件评论

时间:2014-05-05 13:22:32

标签: javascript jquery internet-explorer browser browser-detection

我知道如何使用conditional comments测试ie版本。但是,通过测试javascript方法并检查它是否受支持,我发现了一种干净利落的方法,例如:

if(  document.addEventListener  ){
    alert("you got IE9 or greater");
}

但是,如果它是一个特定的版本,我不知道如何测试它(比如,如果它是 IE8 我想做点什么,但如果它是 IE7 则不行或 IE9 或其他版本。

我可以使用James Panolsey's solution

var ie = (function(){

    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');

    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );

    return v > 4 ? v : undef;

}());

但它确实使用条件评论进行测试。


为什么没有条件评论?由于Standards mode。正如微软在websitedev center中所述,他们在新版本中支持 NOT

  

重要从Internet Explorer 10开始,条件注释为否   标准模式支持更长时间。使用特征检测来提供   网站功能的有效后备策略不是   由浏览器支持。有关标准模式的更多信息,请参阅   定义文档兼容性。


通过有效方法进行测试在我的POV中效率更高,但我不知道如何以特定版本的方式进行测试...(“使用这个你可以测试那个版本“)。我所知道的唯一一个就是我用的例子。是否有其他方法可以用来测试它?不是吗?

1 个答案:

答案 0 :(得分:0)

虽然功能检测非常有用,并且有时是区分支持和非支持浏览器版本的最快方法,但检测IE及其版本实际上是小菜一碟:

var uA = navigator.userAgent;
var browser = null;
var ieVersion = null;
var htmlTag = document.documentElement;

if (uA.indexOf('MSIE 6') >= 0) {
    browser = 'IE';
    ieVersion = 6;
}
if (uA.indexOf('MSIE 7') >= 0) {
    browser = 'IE';
    ieVersion = 7;
}
if (document.documentMode) { // as of IE8; strictly IE proprietary 
    browser = 'IE';
    ieVersion = document.documentMode;
}

// Using it can be done like this: 
if (browser == 'IE' && ieVersion == 11)
    htmlTag.className += ' ie11';


这就是你所需要的。你也可以在较低的模式/视图中使用此脚本捕获更高的IE,包括兼容性〜。