繁体   English   中英

IE版本,在javascript中没有条件注释

[英]IE version Without conditional comments in javascript

我知道如何使用条件注释来测试ie版本。 但是,通过测试一个javascript方法并检查它是否受支持,我找到了一种很好且干净的方法,例如:

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

但是,如果它是特定版本,我不知道如何进行测试(例如,如果它是IE8 ,我想做点什么,但是如果它是IE7IE9或其他版本,则不行。

我可以使用James Panolsey的解决方案

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 正如Microsoft在其网站开发中心中所述 ,他们支持其新版本:

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


在我的POV中,通过有效方法进行测试更有效,但是我不知道如何以特定版本进行测试……(“使用可以测试版本”)。 我所知道的唯一一个是我作为示例使用的上述一个。 还有其他方法可以测试吗? 或不?

虽然功能检测非常有用,并且有时是区分支持浏览器版本和不支持浏览器版本的最快方法,但是检测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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM