【问题标题】:Conditional X-UA-Compatible content based on user's IE version有条件的 X-UA-Compatible 内容基于用户的 IE 版本
【发布时间】:2016-02-05 05:56:06
【问题描述】:

是否可以配置erb页面来检测IE版本并根据该选择不同的兼容性标签,所以它应该是:

如果用户 IE=10 则

否则

请不要提出其他解决方案,因为我需要的正是我所描述的逻辑。 我们有一个在 IE10 中无法运行的应用程序,我们尝试的所有解决方案都无法运行,除非只有 IE=EmulateIE9 才能运行。

【问题讨论】:

  • 解决方案可以使用 JavaScript 吗?
  • IE11怎么样?它可以正常工作吗?
  • 我假设你已经尝试过: 只是提一下,因为它解决了我以前遇到的一些随机问题使用旧版 IE。
  • @Teemu 嗨,是的,该页面仅在 IE 中不工作,任何只有 IE=EmulateIE9 解决了这个问题,但随后页面在 IE8 中停止工作并继续在 IE11 中工作
  • 试试<!--[if !IE]> --><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"><!-- <![endif]--> 这也会在IE11中引起IE9仿真,但不影响IE

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


【解决方案1】:

该应用程序是否可以在 IE11 或 Microsoft Edge 中运行?如果没有,那么您可以强制所有 Microsoft 浏览器使用 <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"> 模拟 IE9。

如果您需要专门针对 IE10,那么您应该使用特征检测,因为 IE10+ no longer supports conditional comments 和用户代理嗅探可能不可靠。

这是一个代码 sn-p,它通过检查特定于版本的 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>

上面的 sn-p 可能不适用于您的目的,因为 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 中附加任何内容。

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-09-23
    • 1970-01-01
    • 2011-05-15
    • 2013-06-23
    • 1970-01-01
    • 2013-02-20
    • 2014-12-08
    • 2011-01-20
    • 2013-01-14
    相关资源
    最近更新 更多