繁体   English   中英

基于用户IE版本的条件X-UA兼容内容

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM