5

尽管设置了浏览器模式,但当浏览器为 IE10 时,我只需要使用纯 JavaScript(无框架)进行检测。

一些评论: - 我确实需要检测浏览器,它不是仅检测功能的选项,因为目的是减轻浏览器错误。- 我尝试了常见的方法(如 UA 字符串或功能检测)但没有成功,当我将浏览器模式切换到 IE9 时,可能暗示在 IE10 中的所有方面都消失了。

4

1 回答 1

12

如果您想检测您正在使用的浏览器,IE 有一个特殊功能,称为条件编译 - http://www.javascriptkit.com/javatutors/conditionalcompile.shtml

要获取版本,您可以使用@_jscript_version. 所以在Javascript中,我会使用:

<script type="text/javascript">
    var isIE10 = false;
    /*@cc_on
        if (/^10/.test(@_jscript_version)) {
            isIE10 = true;
        }
    @*/
    console.log(isIE10);
</script>

我没有 IE10,但是用 IE9 测试时,它似乎可以工作。如果我将浏览器模式更改为 7 或 8,@_jscript_version则具有真正的浏览器 JScript 版本(与9我的情况一样)。

要查看 JScript 版本列表,您可以在此处查看它们 - http://en.wikipedia.org/wiki/JScript#Versions。它没有列出 IE10,但我假设它是 10。在 IE9 之前,他们使用的数字与浏览器版本不一致,但从 9 开始可能就在正确的轨道上。你必须看看@_jscript_version默认情况下 10 是什么,但我假设它以“10”开头并且可能有一个次要版本。


更新:

为避免缩小评论,您可以使用以下内容:

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

于 2013-04-04T19:52:37.580 回答