我有一个包含用户注册表单的页面。我用<!--[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时页面上会出现奇怪的错误。
答案 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") { ..... }
为什么?
浏览器检测很脆弱 - 您的检测代码可能无法获取较新版本的IE,从而导致您的网站中断。事实上,这正是这里发生的事情。你可能会在IE11上再次遇到同样的问题。上述功能检测脚本可在所有浏览器和所有版本中正常运行。
并非所有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或版本特定功能。