【问题标题】:Detect IE 10 among conditional comments for IE 7+ detection在 IE 7+ 检测的条件注释中检测 IE 10
【发布时间】:2013-10-15 23:39:12
【问题描述】:

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

但这并不完全适用于 IE 10。可以使用 java-script 来确定 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时页面会出现奇怪的错误。

【问题讨论】:

  • 浏览器检测几乎总是一个错误。通常最好改用特征检测。你需要它做什么?
  • @Spudley,此表单使用 IX509 Windows 界面,由于 ActiveX 支持,它需要使用 IE。所以为了避免页面出现奇怪的错误,这个表单必须只针对 IE 显示。
  • 很公平,所以只需检测 ActiveX 功能是否可用。简单。

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


【解决方案1】:

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

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

或者更具体地说:

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

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

if(typeof ActiveXObject != "undefined")

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

【讨论】:

  • +1,虽然我建议使用window.ActiveXObject 而不仅仅是ActiveXObject
  • @Spudley 是的,我本来打算这样说,但根据实施情况,它不应该是真正需要的——我已经将它添加到答案中以使 OP 意识到它。 (我不喜欢到处都是window. 的脚本,所以我自己很少使用它)
【解决方案2】:

使用特征检测,而不是浏览器检测。

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

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

为什么?

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

  2. 并非所有 IE 安装都有可用的 ActiveX。如果您检测到 IE,然后假设它支持 ActiveX,那么您的网站对于那些没有它的人来说会很糟糕。同样,使用特征检测可以避免这个问题。

【讨论】:

    【解决方案3】:

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

    首先错误页面用以下&lt;div&gt;包裹:

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

    IE表单也用&lt;div&gt;包裹:

    <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>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 2011-05-09
      • 2013-06-23
      • 2016-07-22
      • 2012-02-24
      • 2011-02-04
      • 2012-05-23
      相关资源
      最近更新 更多