后条件评论时代的浏览器检测?

时间:2014-06-25 05:19:05

标签: javascript html internet-explorer browser-detection

Internet Explorer 10+不再支持条件注释。好的,真棒。

这就是我需要的东西:

    (if this browser is Internet Explorer of ANY version) {
         //apply IE CSS class here
    } else {
         //apply non IE CSS class here
    }

我已经尝试了我可以在互联网上找到的所有内容,但没有任何效果不会对所有浏览器产生影响。例如,以下代码不起作用,因为"浏览器不是IE浏览器在所有浏览器上打印:

    <!DOCTYPE html>
    <!--[if lte IE 8]><html class="ie8 no-js" lang="en">IE 8-10<![endif]-->
    <!--[if lte IE 10]><html class="ie10 no-js" lang="en">ID 8-<![endif]-->
    <script>
    var isIE = (navigator.userAgent.indexOf("MSIE") != -1);
    if (!isIE) {
    document.write("<html class='not-ie no-js' lang='en'>");
    document.write("Browser is nott IE.");
    }
    </script>

2 个答案:

答案 0 :(得分:1)

navigator.sayswho= (function(){
    var ua= navigator.userAgent, tem, 
    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\bOPR\/(\d+)/)
        if(tem!= null) return 'Opera '+tem[1];
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
})();

代码将返回浏览器的名称。您可以根据返回值执行条件语句。

感谢你/ kennebec的剧本。效果很好。

答案 1 :(得分:1)

虽然功能检测通常是从非支持性浏览器版本中获取支持的最经济的方式,但检测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,包括兼容性〜。我包含了版本部分,因为任何严肃的Web开发人员迟早会遇到IE版本的差异。