是否可以将erb页面配置为检测IE版本,并根据该选择不同的兼容性标记,因此它应该如下:
如果用户IE = 10那么 < meta http-equiv =“X-UA-Compatible”content =“IE = EmulateIE9”/>
否则
请不要提出其他解决方案,因为我完全需要我描述的逻辑。 我们有一个在IE10中不起作用的应用程序,我们尝试的所有解决方案都不起作用,只有IE = EmulateIE9才有效。
答案 0 :(得分:1)
该应用程序是否可以在IE11或Microsoft Edge中运行?如果没有,那么您可以强制所有Microsoft浏览器使用<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
模拟IE9。
如果您需要专门针对IE10,那么您应该使用功能检测,因为IE10+ no longer supports conditional comments和用户代理嗅探可能不可靠。
这是一个代码段,通过检查特定于版本的CSS属性来识别浏览器。它是a solution that I found here的简化版本。我已在IE9,10,11和Microsoft Edge中对其进行了测试:
<!DOCTYPE html>
<html>
<head>
<title>Browser Detection</title>
</head>
<body>
<h1>Browser Detection</h1>
<h2 id="message"></h2>
<script>
var message = document.getElementById('message');
var browser = "Less than IE10 (or not IE at all)";
if (document.body.style['msTouchAction'] != undefined) {
browser = "IE10";
}
if (document.body.style['msTextCombineHorizontal'] != undefined) {
browser = "IE11 or higher";
}
message.innerHTML = browser;
</script>
</body>
</html>
上面的代码段可能不适用于您的目的,因为在已经解析了头部中的元标记之后,Javascript在正文中执行。
我想你可以触发IE10 +浏览器的页面重定向并为URL添加一个参数,这会阻止功能检测Javascript在下次执行时(你不想创建一个无限循环)。一个简单的例子:
<script>
if (!document.location.search) {
if (document.body.style['msTouchAction'] != undefined) {
// Browser is IE10 or higher
window.location = "http://www.yoururl.com/?ie9mode";
}
}
</script>
更好的解决方案是将浏览器检测脚本的结果存储在会话变量中,这样您就不需要向URL附加任何内容。
我希望这有帮助!