-1

我有一个带有用户注册表格的页面。我将其包装<!--[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 时页面会出现奇怪的错误。

4

3 回答 3

3

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

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

或者更具体地说:

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

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

if(typeof ActiveXObject != "undefined")

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

于 2013-10-15T14:56:10.937 回答
1

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

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

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

为什么?

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

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

于 2013-10-15T15:04:08.613 回答
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>

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

于 2013-10-15T15:39:12.857 回答