在IE 7+检测的条件注释中检测IE 10

时间:2013-10-15 14:44:26

标签: javascript html internet-explorer internet-explorer-10

我有一个包含用户注册表单的页面。我用<!--[if IE]> ... <![endif]-->包装它只在IE中显示它。其他浏览器会显示相应的错误:<![if !IE]>...<![endif]>

但这并不完全适用于IE 10.可以使用java脚本来确定IE 10,例如:

<script type="text/javascript">
    var pattern = /MSIE\s([\d]+)/;
    var ua = navigator.userAgent;
    var matched = ua.match(pattern);
    if (matched) {
        alert("IE 10");
    }
</script>

但是如何将它与我用于IE7 +的html块绑定?

更新

需要使用需要IE使用的IX509 Windows界面,因为它是COM对象(我不确定,但似乎它使用ActiveX),否则当使用IX509时页面上会出现奇怪的错误。

3 个答案:

答案 0 :(得分:3)

对于ActiveX支持,只需检查JS中是否存在ActiveXObject:

if(typeof window.ActiveXObject != "undefined")

或更具体地说:

if(typeof window.ActiveXObject == "function")

如果您确信脚本中的范围不是问题并且不需要window.,那么变量当然会自动从window对象中提取,因此您可以缩短代码到:

if(typeof ActiveXObject != "undefined")

虽然它只应用于理解潜在后果

答案 1 :(得分:1)

使用功能检测,而不是浏览器检测。

您可以使用以下简单的代码行检测浏览器是否支持ActiveX:

if(typeof window.ActiveXObject != "undefined") { ..... }

为什么?

  1. 浏览器检测很脆弱 - 您的检测代码可能无法获取较新版本的IE,从而导致您的网站中断。事实上,这正是这里发生的事情。你可能会在IE11上再次遇到同样的问题。上述功能检测脚本可在所有浏览器和所有版本中正常运行。

  2. 并非所有IE安装都有ActiveX可用。如果您检测到IE然后假设它支持ActiveX,那么对于那些没有IE的用户,您的站点将会崩溃。同样,使用特征检测将避免此问题。

答案 2 :(得分:0)

我改进了我最初尝试的方法。

首先,错误页面包含以下<div>

<div id="not_ie" style="display:none">

IE表单也包含<div>

<div id="ie" style="display:none">

以下js根据浏览器类型显示表单或错误:

<script type="text/javascript">
    var pattern = /MSIE\s([\d]+)/;
    var ua = navigator.userAgent;
    var matched = ua.match(pattern);
    if (matched) {
        var elem = document.getElementById("ie");
        elem.style.display = "inline";
    } else {
        var elem = document.getElementById("not_ie");
        elem.style.display = "inline";
    }
</script>

无需使用条件注释,确定IE的ActiveX或版本特定功能。