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

时间:2015-11-04 16:23:28

标签: javascript html internet-explorer cross-browser compatibility

是否可以将erb页面配置为检测IE版本,并根据该选择不同的兼容性标记,因此它应该如下:

如果用户IE = 10那么 < meta http-equiv =“X-UA-Compatible”content =“IE = EmulateIE9”/>

否则

请不要提出其他解决方案,因为我完全需要我描述的逻辑。 我们有一个在IE10中不起作用的应用程序,我们尝试的所有解决方案都不起作用,只有IE = EmulateIE9才有效。

1 个答案:

答案 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附加任何内容。

我希望这有帮助!