检查IE 10是否可用

45

如果用户使用IE 10,我该如何使消息框在页面加载时出现?

function ieMessage() {
    alert("Hello you are using I.E.10");
}

我的网页是一个JSF面板(XHTML)。


6
为什么需要这样做? - Ry-
学校项目,需要在不同的浏览器中显示消息 :) - user2292674
在JavaScript中如何检测浏览器?(https://dev59.com/uXE95IYBdhLWcg3wOLU1) - Vucko
2
只是提醒一下——我知道世界告诉我特性检测和优雅降级是正确的方式,但当涉及到使用或避免ES6(以及最终的ES7)特性时,通常的方法就不起作用了。我不能在不支持它们的浏览器上使用“let”、“const”和箭头函数,而我想开始使用它们。这让我别无选择,只能检测IE 10和11,并使用不同的脚本。 - user1329482
1
@RyanO'Hara 我在创建自定义滚动条方面遇到了问题,显然在IE10中无法实现... - basickarl
@KarlMorrison:那么……?如果你不能在IE10中完成它,知道浏览器是IE10会帮助你完成它吗? - Ry-
3个回答

55

检测这个问题的真正方法,不需要使用条件注释和用户代理嗅探,而是使用条件编译:

<script type="text/javascript">
    var isIE10 = false;
    /*@cc_on
        if (/^10/.test(@_jscript_version)) {
            isIE10 = true;
        }
    @*/
    console.log(isIE10);
</script>
运行此代码后,您随时可以使用以下内容:
if (isIE10) {
    // Using Internet Explorer 10
}

参考资料:如何检测IE10在IE9浏览器模式下?


更新:

为了避免注释被压缩,你可以使用类似以下的方法:

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版本的内部值转换而来)。


1
然而,在不同版本的IE中测试这个会更加烦人。 - Alex W
1
非常好的答案,谢谢。这个能更新到IE11吗? - Zubzob
1
显然它是未定义的。 - Zubzob
4
IE11不支持条件编译。 - Aaron
3
这个问题是关于IE 10的,不是所有版本的IE。已经确定这对于IE 11不起作用,因为他们移除了对条件编译的支持(离题),请注意不要更改原意。 - Ian
显示剩余6条评论

34

一般来说,最好避免使用用户代理嗅探和条件编译/注释。相比之下,更好的方法是使用特性检测优雅降级渐进增强。然而,在极少数需要检测浏览器版本的情况下,可以使用以下代码片段:

if 语句仅在 IE 10 上执行。

// IF THE BROWSER IS INTERNET EXPLORER 10
if (navigator.appVersion.indexOf("MSIE 10") !== -1)
{
    window.alert('This is IE 10');
}

这个if语句只会在IE 11上执行

// IF THE BROWSER IS INTERNET EXPLORER 11
var UAString = navigator.userAgent;
if (UAString.indexOf("Trident") !== -1 && UAString.indexOf("rv:11") !== -1)
{
    window.alert('This is IE 11');
}

http://jsfiddle.net/Qz97n/


1
太棒了!我已经找了好几个小时了,想知道如何做到这一点。+1 还包括 IE 11 ;) - www139
1
@Alex W,如何改进上述解决方案以便检测出IE10或更低版本的浏览器? - bluelabel

20

以下是获取当前IE浏览器或IE版本的方法:

function IE(v) {
  return RegExp('msie' + (!isNaN(v)?('\\s'+v):''), 'i').test(navigator.userAgent);
}

以下是您如何使用它的方法:

if(IE())   alert('Internet Explorer!');
if(IE(10)) alert('Internet Explorer 10!');

v来自哪里? - Rhyso
1
@Rhyso 是你传递给函数的参数 - 在这种情况下是数字10。 - Daryl Ginn
抱歉,应该看一下使用示例 :) - Rhyso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接