【问题标题】:IF IE conditionals not working如果 IE 条件不起作用
【发布时间】:2019-02-11 22:16:58
【问题描述】:

我一直在让自己发疯,试图让评论条件起作用,但我没有运气,有人能解释我做错了什么吗?

这是我的代码:

        <!--[if IE 10]>
            IE IS VERSION 10<br />
        <![endif]-->
        <!--[if !IE]><!-->
            Browser is not IE
        <!--<![endif]-->
        <!--[if lt IE 9]>
            IE IS LESS THAN VERSION 9<br />
        <![endif]-->

正在发生的事情令人沮丧地不一致。当我在 IE8 中使用上述代码加载页面时,它会收到消息 “IE IS LESS THAN VERSION 9” 很好,对吧?不,因为当我在 IE10 中加载 SAME PAGE 时,我收到消息 “Browser is not IE”

为什么认为IE10不是IE浏览器?!我一直在逐页爬行,但从我发现的代码来看,我的代码似乎没有任何问题。

【问题讨论】:

  • 唯一有效的代码是你的 sn-p 中的最后一个。 IE10 不支持条件 cmets,因此 [if IE 10] 不起作用。只有 IEs [if !IE] 没用。正如您在发布的代码中看到的那样,!IE 条件中有一个“语法错误”,因此文本 Browser is not IE 实际上应该显示在每个浏览器中...
  • 我讨厌 Internet Explorer

标签: html internet-explorer comments conditional


【解决方案1】:

我很惊讶没有人添加纯 CSS 解决方案。如果你只想使用 css,那么使用这样的语句:

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* Put your IE-only styles here. Works for IS 10 & IE 11*/
}

这样您就不必依赖 jquery 或任何 html 标记。只需将其发布在 css 中,您就可以开始使用了。

现在,这是一个 hack 吗?可能。这取决于使用 microsoft 高对比度标签,但由于没有其他浏览器使用 ms 标签,所以你应该很高兴。

最后,查看这些页面了解更多信息:

Blog Post

MS Site on the contrast tag

【讨论】:

  • 谢谢马克西姆斯,很棒的把戏......................我讨厌你 IE
  • 这节省了我很多时间尝试破解 IE 11 的 Flexbox 的愚蠢实现 — 谢谢。
【解决方案2】:

CSS 解决方案:

如果您只想在浏览器上应用 CSS 基础,那么您可以尝试:

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* Put your IE-only styles here. Works for IS 10 & IE 11*/
}

JavaScript 解决方案:

IE 10 不支持条件语句。

Conditional statements in Internet Explorer 10.。它将条件 cmets 视为常规 HTML cmets,并完全忽略。

使用Modernizr 等特征检测库代替浏览器检测。

在这个comment 中找到了impressivewebs 的解决方案:

Here is Demo to test

解决办法是:

if (Function('/*@cc_on return document.documentMode===10@*/')()) {
    alert('IE 10');
} else {
    alert('Not IE 10');
}

  • 不需要条件 cmets;
  • 即使评论剥离压缩/处理也能正常工作;
  • Internet Explorer 11 中未添加 ie10 类;
  • 在 Internet Explorer 10 兼容模式下运行的 Internet Explorer 11 更有可能按预期工作;
  • 不需要独立的脚本标签(可以添加到头部的其他 JavaScript 代码中)。
  • 不需要 jQuery 来测试

【讨论】:

  • “跨浏览器最佳实践”链接已损坏。
【解决方案3】:

IE 10、11 及更高版本不再支持条件 cmets。

看到这个答案:https://stackoverflow.com/a/22187600/1498739

【讨论】:

    【解决方案4】:

    尝试在页面顶部附近添加以下元标记以选择启用 Internet Explorer 9 行为:

    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
    

    这是因为条件 cmets 已在 Internet Explorer 10 标准中删除,并且为提高互操作性和与 HTML5 的合规性而设置了怪异模式。这意味着条件注释现在被视为常规 cmets,就像在其他浏览器中一样。此更改可能会影响专门为 Windows Internet Explorer 编写的页面或使用浏览器嗅探来改变其在 Internet Explorer 中的行为的页面。

    【讨论】:

    • 这从今天起无效。
    【解决方案5】:

    IE 10 丢弃了条件 cmets。

    你可以像这样在 javascript 中做类似的事情:

    if ($.browser.msie && $.browser.version === 10) {
        // stuff here (like adding an IE10 class to the body or html tag
    }
    

    【讨论】:

    • 是的,但这需要我包含 JQUERY :(
    • 好吧,如果在 IE10 上放弃了条件,你就没有太多选择了,是吗?
    • 不幸的是,这个函数在 jQuery 1.9 中被移除了。
    • jQuery 不是 javascript 的同义词。
    猜你喜欢
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多