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

Detect IE 10 among conditional comments for IE 7+ detection

本文关键字:检测 IE 注释 条件      更新时间:2023-09-26

>我有一个带有用户注册表单的页面。我用<!--[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块绑定它呢?

更新

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

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

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

或者更具体地说:

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

如果您确信脚本中的范围不是问题并且不希望window.,则变量当然会自动从window对象中获取,因此您可以将代码缩短为:

if(typeof ActiveXObject != "undefined")

虽然它只应该在了解潜在后果的情况下使用

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

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

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

为什么?

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

  2. 并非所有 IE 安装都有可用的 ActiveX。如果您检测到IE,然后假设它支持ActiveX,则对于那些没有IE的人来说,您的网站将严重崩溃。同样,改用功能检测可以避免此问题。

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

首先,错误页面用以下<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>

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