【问题标题】:How to use meta tag in a browser version condition (IE 10 and above)?如何在浏览器版本条件(IE 10 及以上)中使用元标记?
【发布时间】:2015-12-02 20:54:15
【问题描述】:

我正在使用 IE11。如果浏览器是 IE11,我必须强制浏览器充当 IE 10。 由于 Microsoft 取消了对 Conditional Comments 的支持,我正在努力寻找一种方法。 我用 JavaScript 试过了,

<script language="JavaScript">
         function setVersion() {
             if (getInternetExplorerVersion() === 11) {
                 debugger;
                 $('head').append('<meta http-equiv="X-UA-Compatible" content="IE=10" />');
             }
         }
         //Method to get the IE version
         function getInternetExplorerVersion() {
             var rv = -1;
             if (navigator.appName == 'Microsoft Internet Explorer') {
                 var ua = navigator.userAgent;
                 var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
                 if (re.exec(ua) != null)
                     rv = parseFloat(RegExp.$1);
             }
             else if (navigator.appName == 'Netscape') {
                 var ua = navigator.userAgent;
                 var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                 if (re.exec(ua) != null)
                     rv = parseFloat(RegExp.$1);
             }
             return rv;
         }
    </script>

现在因为 getVersion 在加载页面后被调用,所以这段代码没有任何效果。 还有其他方法吗?

【问题讨论】:

  • 正如您已经发现的那样,javascript 更改渲染模式为时已晚。您可能必须在服务器端执行此操作(因为我没有解决方案),或者您只是在每种情况下都提供具有 IE=10 的 X-UA-Compatible?
  • 其实我之前就是这么做的。但是不同页面的a部分无法在IE10中显示垂直滚动。那部分太复杂了。我只是发布了这部分,因为它不会造成任何麻烦
  • 虽然我正在尝试另一种方式@Allanon

标签: javascript html internet-explorer meta-tags conditional-comments


【解决方案1】:

你可以像这样使用带注释的条件注释

<!--[if gt IE 9]><!-->
    <meta http-equiv="X-UA-Compatible" content="IE=10" />
<!--<![endif]-->

这样ie10及以上会有标签,而ie9及以下则没有标签,导致条件不满足。

示例:

<!--[if lte IE 8]>
    <script type="text/javascript" src="/app.ie8.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script type="text/javascript" src="/app.ie8.js" defer></script>
<!--<![endif]-->

将在没有延迟的情况下在 ie8 上加载 js,而在 ie9 及更高版本(以及所有其他浏览器)将加载带有延迟忽略条件的脚本,因为它们被视为已注释

有一个链接到Wiki 以获得解释。

【讨论】:

  • 好的。但我正在研究 IE 11。它根本不支持条件注释。它忽略它,就好像它是一个评论一样。您的答案将在 IE10 以下的浏览器上完美运行。
  • 事实上它会用这个方法加载到 ie10 和 ie11 中,而不是在 ie9 和更早的版本中,ie10 将始终充当 ie10 :)
  • 但是我的朋友&lt;!--[if gt IE 9]&gt;&lt;!--&gt; &lt;meta http-equiv="X-UA-Compatible" content="IE=10" /&gt; &lt;!--&lt;![endif]--&gt;会在IE9+浏览器中充当评论。因此,您的代码将无法在 IE 10 和 11 中运行。我在 IE10 或任何更低版本中完全没有问题。如果是 IE 11,则必须将其渲染为 IE10 而不是其他。
  • 测试它,它不会被评论:) 它会以这种方式出现 &lt;!-- --&gt; &lt;meta http-equiv="X-UA-Compatible" content="IE=10" /&gt; &lt;!-- &lt;![endif] --&gt; 没有评论内部标签,我们在 owr 网站上使用它,它工作完美
  • 好的。让我试试,正要实现一个新方法,希望能运行。
【解决方案2】:

如果浏览器是 IE11,我必须强制浏览器充当 IE 10 的条件。

为什么不使用没有任何条件的元标记(或 http-header)?
IE9- 不能充当 IE10 并且会忽略这一点。
IE10 将充当 IE10 i。 e.本身
IE11 将根据您的需要充当 IE10
不确定 Microsoft Edge
所有其他浏览器都会忽略它。

我正在努力想办法

检测模式的最佳方法是document.documenMode,但对于元标记来说已经太晚了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2011-04-17
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多