[英]Conditional X-UA-Compatible content based on user's IE version
是否可以将erb页面配置为检测IE版本并基于该页面选择不同的兼容性标签,因此它应以下列方式工作:
如果用户IE = 10,则<meta http-equiv =“ X-UA-Compatible” content =“ IE = EmulateIE9” />
其他
请不要提出其他解决方案,因为我需要我所描述的逻辑。 我们有一个无法在IE10中运行的应用程序,我们尝试过的所有解决方案都无法正常运行,只有在IE = EmulateIE9时它才能运行。
该应用程序可以在IE11或Microsoft Edge中运行吗? 如果不是,那么您可以强制所有Microsoft浏览器使用<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
来模拟IE9。
如果您需要专门针对IE10,则应使用功能检测,因为IE10 +不再支持条件注释,并且用户代理嗅探可能不可靠。
这是一个代码片段,可通过检查特定于版本的CSS属性来识别浏览器。 这是我在这里找到的解决方案的简化版本。 我已经在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>
上面的代码段可能无法满足您的目的,因为在解析头中的meta标记之后,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后面添加任何内容。
我希望这有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.