如何使用javascript检测IE10?

时间:2013-05-03 20:18:32

标签: javascript jquery cross-browser internet-explorer-10

许多已经在其他问题(也在jQuery文档中)中发布过,旧的jQuery.browser.version已弃用,仅适用于jquery1.3。

您是否知道另一种检测它的简单方法,我可以在之前的代码中包含:

function handleInfoDivPopupVisibility(dynamicEleId, staticEleId){
var parentContainer = $('headerSummaryContainer');
var dynamicEle = $(dynamicEleId);
var staticEle = $(staticEleId);

if(isIE() && parentContainer){
    if (jQuery.browser.version != 10) { // I need to find a way to detect if it's IE10 here.
        parentContainer.style.overflow = 'visible'; 
    }
}
dynamicEle ? dynamicEle.style.display = '' : '';
if(dynamicEle && staticEle)
    gui_positionBelow(dynamicEle, staticEle);
}

在您说出thisthis的重复问题之前,我想强调一点,我不想使用css hacks。有没有办法像以前一样简单地检测它?

if (jQuery.browser.version != 10) {...

6 个答案:

答案 0 :(得分:17)

一般来说,检查浏览器版本是个坏主意,检查浏览器功能被认为是更好的做法。但如果你确定你在做什么:

function getIEVersion(){
    var agent = navigator.userAgent;
    var reg = /MSIE\s?(\d+)(?:\.(\d+))?/i;
    var matches = agent.match(reg);
    if (matches != null) {
        return { major: matches[1], minor: matches[2] };
    }
    return { major: "-1", minor: "-1" };
}

var ie_version =  getIEVersion();
var is_ie10 = ie_version.major == 10;

我们在生产中有以下代码,因此它可以正常运行并经过充分测试。

是的,我们确实需要检测IE10,而不仅仅是IE10中存在的特定功能,而不是早期版本中的功能。

答案 1 :(得分:15)

Internet Explorer具有条件编译功能(http://www.javascriptkit.com/javatutors/conditionalcompile.shtml)。你可以用这个:

var isIE10 = false;
/*@cc_on
    if (/^10/.test(@_jscript_version)) {
        isIE10 = true;
    }
@*/
alert(isIE10);

DEMO: http://jsfiddle.net/X3Rvz/1/

您可以在所有JavaScript代码之前添加此代码,然后只需引用isIE10

条件编译不会在非IE中运行,因此isIE10仍然是false@_jscript_version只会以IE 10中的10开头。

IE 10中不支持条件注释,并且可以欺骗用户代理字符串。

由于缩小通常会删除评论,因此您可以使用evalFunction以类似方式查找:

var isIE10 = false;
if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) {
    isIE10 = true;
}

DEMO: http://jsfiddle.net/wauGa/2/


<强>更新

为了避免缩小评论但同时结合检测任何版本,您可以使用以下内容:

var IE = (function () {
    "use strict";

    var ret, isTheBrowser,
        actualVersion,
        jscriptMap, jscriptVersion;

    isTheBrowser = false;
    jscriptMap = {
        "5.5": "5.5",
        "5.6": "6",
        "5.7": "7",
        "5.8": "8",
        "9": "9",
        "10": "10"
    };
    jscriptVersion = new Function("/*@cc_on return @_jscript_version; @*/")();

    if (jscriptVersion !== undefined) {
        isTheBrowser = true;
        actualVersion = jscriptMap[jscriptVersion];
    }

    ret = {
        isTheBrowser: isTheBrowser,
        actualVersion: actualVersion
    };

    return ret;
}());

并访问IE.isTheBrowserIE.actualVersion等属性(从JScript版本的内部值转换而来)。

答案 2 :(得分:3)

jQuery.browser.version仍然有效,但你必须包含jquery-migrate插件。

http://api.jquery.com/jQuery.browser/ https://github.com/jquery/jquery-migrate/#readme

答案 3 :(得分:0)

The IE10 User-Agent String

  

但是,如果您的网站仍在使用用户代理嗅探,则将“MSIE”令牌增加到“10.0”尤其值得注意。为什么?因为它会在令牌的字符串值中添加一个额外的数字。大多数网站都会毫不费力地处理这个问题,但是有些网站会错误地处理额外的数字,导致他们将IE10识别为IE1。

     

为了帮助说明,这里是一个正则表达式,它只捕获“MSIE”标记值的第一个数字:

// INCORRECT: will report IE10 version in capture 1 as "1"
var matchIE = /MSIE\s(\d)/;
     

这是一个捕获“MSIE”标记的全部值的文件:

// Correct: will report IE10 version in capture 1 as "10.0"
var matchIE = /MSIE\s([\d.]+)/

答案 4 :(得分:0)

这是一个检测IE 10的单行解决方案

var IE10 = navigator.userAgent.toString().toLowerCase().indexOf("trident/6")>-1;

有关其他版本和浏览器的详细信息,请参阅此Link of Browser Detection

答案 5 :(得分:0)

我发现自己有一个问题(带有图例的框架集的边框半径)与IE 9到11(没有检查IE 12)
在IE 11中,MSIE不是长用户代理,appName是Mozilla,但是三叉戟在那里 我设法提取三叉戟版本#并检测它

if(navigator.appVersion.indexOf('Trident/')>-1){// Begin stupid IE crap
    var IE=navigator.appVersion;
    IE=IE.slice(IE.indexOf('Trident/')+8);
    IE=IE.slice(0,IE.indexOf(';'));
    IE=Number(IE);
    if(IE>=5&&IE<=7) // IE 9 through IE 11
        document.body.className='ie';
}