Internet explorer 为什么';Internet Explorer 11即使在模拟Internet Explorer 8文档模式时也会遵守条件注释吗?

Internet explorer 为什么';Internet Explorer 11即使在模拟Internet Explorer 8文档模式时也会遵守条件注释吗?,internet-explorer,browser,conditional-comments,internet-explorer-11,ie11-developer-tools,Internet Explorer,Browser,Conditional Comments,Internet Explorer 11,Ie11 Developer Tools,我正在使用新的开发工具将文档模式切换到“8”,但是条件注释仍然被忽略,也就是说,它们没有被正确解析,并且表现得像普通注释。因此,浏览器不会请求/加载条件注释中的任何引用文件 为什么会发生这种情况?是虫子吗 如果您认为这确实是一个需要修复的错误,请进入并说您也可以在针对此问题报告的Microsoft错误报告中复制此错误: 更新:在提到的bug报告中,这个问题已被修复。我也有同样的问题-整个上午都让我发疯。我添加了,并选择了所有选项,包括yepnope.js 现在我的测试是这样的: Moderni

我正在使用新的开发工具将文档模式切换到“8”,但是条件注释仍然被忽略,也就是说,它们没有被正确解析,并且表现得像普通注释。因此,浏览器不会请求/加载条件注释中的任何引用文件

为什么会发生这种情况?是虫子吗

如果您认为这确实是一个需要修复的错误,请进入并说您也可以在针对此问题报告的Microsoft错误报告中复制此错误:


更新:在提到的bug报告中,这个问题已被修复。

我也有同样的问题-整个上午都让我发疯。我添加了,并选择了所有选项,包括yepnope.js

现在我的测试是这样的:

Modernizr.load({
            test: Modernizr.canvas,
            nope: ['Content/Site-ie-8.min.css', 'Content/font-awesome-ie7.min.css']
});

在本例中,我测试画布(在InternetExplorer9之前不受支持),因此我加载条件内容。现在,在InternetExplorer11开发者工具中切换浏览器模式时,这一点就起作用了。

我刚刚尝试在Windows 7上使用这一点,以确保我使用的语义元素(通过条件注释)是为和下面创建的,而浏览器只是忽略它们-_-

这项功能在中运行得非常好,微软只是需要对其进行修补,不是吗

<!--[if lte IE 8]><script src="ie8-html5.js"></script><![endif]-->


除此之外,我实际上很喜欢InternetExplorer,它带来了变化。

我有另一个解决方案

打开InternetExplorer8兼容模式时,包含字符串“MSIE 8.0”,因此:

(PHP示例)

if(strpos($\u服务器['HTTP\u用户\代理],'MSIE 8.0')!==false){
$head[]=sprintf(“”);
}

我最近遇到了同样的问题。我还发现一些条件注释是有效的:

  • gt
    lt
    工作正常
  • gte
    lte
    从未工作过
因此,一个可能的解决方案是将条件语句更改为使用
gt
lt
运算符


另一个我发现更有用的替代方法是使用一个服务,比如。

一些条件注释正在工作,例如“
gt
”和“
lt
”,但例如
我没有看到这里提到的内容,但是在这里需要注意的是,如果您更改兼容性视图设置,条件注释将按预期工作。因此:

  • 在IE11中,单击“工具”
  • 兼容性视图设置
  • 键入URL并单击添加
  • 现在在我的本地主机上似乎工作得很好。我还没有对它进行过广泛的测试,但它可能会对某些人有所帮助。

    雅各布·罗西[MSFT]

    这应该在IE11的更新1中修复

    这是在2014年4月22日发布的


    在运行几个测试我自己似乎这是固定的,所有的运行顺利再次测试最惊人的浏览器有史以来生产…互联网浏览器

    这对我来说很有效,似乎是最优雅/最简单的修复方法(我猜是唯一支持
    -ms high contract
    )的浏览器:



    问我自己同样的问题!我知道他们放弃了IE10中的有条件的评论,但是IHO仿真器在测试旧浏览器时应该考虑它们。事实上,这使得这个特性无法使用。真正的问题是为什么你使用兼容模式?我的建议是避免像瘟疫一样的兼容模式。它当然不适合测试,不管您描述的是什么问题,因为它有一些已知的bug和怪癖,这些bug和怪癖可以追溯到它们第一次引入compat模式时。如果您正在测试向后兼容性,那么您确实需要使用IE8(和IE9等)的真实副本。转到并下载他们为测试提供的虚拟机。IE bug tracker上有一个漏洞。我鼓励大家访问微软,并告诉微软你可以复制它。我认为使用兼容模式进行测试比为每个浏览器下载1/2G左右的图像更有意义。所以有一些bug(这可能是其中之一),但99%的时间它都能正常工作。是的,IE 11是一个更好的体验,所有的动画都能正常工作:)。是的,微软有“修补”东西的历史,就在用户开始习惯的时候。看看他们对Windows XP做了什么。。。有些人会说,“修复未损坏的东西”。不管怎么说,Internet Explorer浏览器太糟糕了。版本之间没有一致性。这是谁搞的?即使是我的祖母也能做得更好!编辑:他们从2014年1月22日开始修复(或尝试)这个问题@AdrienBe好吧,这肯定是朝着正确方向迈出的一步。@Anthony我的答案不正确?为什么呢它基本上就是你刚才说的。条件注释不依赖于脚本或任何第三方代码。@Walf-true,但它们在IE中也不受支持。请看这里:我已经测试了文档模式,似乎没有更改用户代理@你说得对。仿真中有两个选项-文档模式和用户代理。文档模式会更改浏览器的工作方式及其呈现页面的方式,而用户代理会更改向站点提供浏览器版本信息的浏览器。(在我的示例中,它是$\u SERVER['HTTP\u USER\u AGENT']变量what包含此信息),因此基本上您需要将这两个选项都更改为IE8,例如。@Andrew谢谢。现在我找到了背景。问题是德语翻译。他们将“用户代理”翻译为“Zeichenfolge des Benutzer代理”,我认为这是指字符集。有些东西不应该翻译;)这个解决方案是最好的。我已经将它转换为ASP.NET MVC Razor,它工作得非常好:@{if(Request.UserAgent.Contains(“MSIE 8.0”){/*您的metatag here*/}这个站点是一个方便的参考,可以了解用户代理字符串的所有排列形式:这需要更多的升级。我得翻两堆答案才能找到他
    if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0') !== false) {
        $head[] = sprintf('<link rel="stylesheet" href="ie8.css" />');
    }
    
    <link rel="stylesheet" href="path/css/screen.css"     type="text/css" />
    <link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />
    
    <link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />
    
    <link rel="stylesheet" href="path/css/screen-ie8.css" type="text/css" />
    
    @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
       /* IE10+ specific styles go here */
    }