为什么在模拟Internet Explorer 8文档模式时,Internet Explorer 11不遵循条件注释?

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

为什么会这样?这是一个bug吗?

如果你认为这确实是需要修复的bug,请进入并在Microsoft的错误报告中报告这个问题:
通过F12开发人员工具模拟文档模式时,条件注释无效.

更新:据报道,这个问题已经在提到的错误报告中得到了修复。


18
问自己同样的问题!我知道他们在IE10中放弃了条件注释,但是在测试旧浏览器时,模拟器应该考虑它们。 - Alexander Rechsteiner
12
确实,这使得该功能无法使用。 - thasmo
3
真正的问题是你为什么在使用兼容性模式?我的建议是尽量避免使用兼容模式,就算你所描述的问题不考虑,它也不适合用于测试,因为从最初引入兼容模式开始就存在已知的错误和怪癖。如果你想要测试向后兼容性,真正需要使用的是IE8(和IE9等)的实际副本。请前往http://modern.ie/并下载供测试的虚拟机。 - Spudley
19
IE bug 跟踪器上有一个未解决的问题。我鼓励每个人访问并告诉微软你可以重现这个问题。https://connect.microsoft.com/IE/feedback/details/806767/conditional-comments-do-not-work-when-emulating-document-modes-via-f12-developer-tools - Evgeny
15
我认为在测试时使用兼容模式比为每个浏览器下载大小约为1/2 GB的镜像更为合理。虽然会出现一些问题(这可能就是其中之一),但99%的情况下它都能正常工作。请注意,此翻译已经尽力保持原意并简化语言,不包含任何额外说明。 - Rolf
显示剩余3条评论
8个回答

29

根据Jacob Rossi [MSFT]的说法

上周发布的IE11更新1版本中应该已经修复了这个问题。

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

我自己进行了一些测试,似乎已经修复了这个问题,现在可以顺畅地测试最棒的浏览器——Internet Explorer!


4
需要多点赞这个。我不得不查看两个 Stack Overflow 的答案才找到这里。 - Tek
@Lynda:你能发一下你的IE11版本吗?我的是11.0.9600.17631。 - Mohamed Hussain
1
@MohamedHussain - 我的版本是11.0.9600.17690IC。 - L84
3
你必须要挖苦一下。 - paddotk
呵呵。感谢你提供的文章链接。 - paddotk
显示剩余2条评论

20

我在Windows 7上使用Internet Explorer 11测试我的使用了HTML5语义化元素的代码,以确保通过条件注释为Internet Explorer 8及以下创建元素,但是该浏览器完全忽略它们。-_-

这个特性在Internet Explorer 10中完美地工作,而微软却必须对其进行修整,是吗?

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

除此之外,我其实很喜欢使用Internet Explorer,这让我感觉有些不同。


4
是的,IE 11是更好的体验,所有动画都可以正常工作。是的,微软一直有一个“摆弄”东西的历史,当用户开始习惯它们时就进行修改。看看他们对Windows XP所做的事情……“修复不需要修复的东西”,有些人会这么说。总之,那很糟糕。 - Rolf
9
Internet Explorer 浏览器太差了。各个版本之间没有一致性。到底是谁开发的?连我奶奶都能做得比这好! - Adriano
4
自2014年1月22日起,他们正在修复这个问题(或尝试修复),具体情况请参见https://connect.microsoft.com/IE/feedback/details/806767/conditional-comments-do-not-work-when-emulating-document-modes-via-f12-developer-tools。 - Adriano
1
@Anthony 我的回答不正确?怎么会呢?它基本上就是在说你刚才说的话。 - DylRicho
@DylRicho 啊,我错过了你说“简单地忽略它们”的地方。是的,我可以确认IE11会忽略它们。 - carrabino
显示剩余7条评论

17

这对我有用,看起来是最优雅/简单的解决方法(Internet Explorer 10Internet Explorer 11 似乎是唯一支持 -ms-high-contract 的浏览器):

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* IE10+ specific styles go here */
}

太好了,谢谢。微软什么时候才会消除这个混乱呢? - Kohjah Breese
感谢提醒,IE 11不支持旧的条件方法。<!--[ if IE ]> - Gino

8
我有另一种解决方案。
启用 Internet Explorer 8 兼容模式的 Internet Explorer 11 包含字符串 'MSIE 8.0',因此:
(PHP 示例)
if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0') !== false) {
    $head[] = sprintf('<link rel="stylesheet" href="ie8.css" />');
}

2
我已经测试了文档模式,似乎并没有改变用户代理?! - mgutt
@mgutt 你说得对。在模拟器中有两个选项——文档模式和用户代理。 文档模式可以改变浏览器的工作方式和页面的呈现效果,而用户代理则可以改变浏览器版本信息。例如,在我的代码中,$_SERVER['HTTP_USER_AGENT']变量就包含了这些信息。所以,你需要将这两个选项都改为IE8,或者其他你需要的浏览器版本。 - Andrei Konstantinov
@ Andrew 谢谢。现在我找到了设置。问题是德语翻译。他们将"user agent"翻译为"Zeichenfolge des Benutzer-Agents",我以为这意味着字符集。有些东西不应该被翻译;) - mgutt
2
这个解决方案是最好的。我已经将它转换为ASP.NET MVC Razor并且它完美地工作:@{if (Request.UserAgent.Contains("MSIE 8.0")) { /your metatag here/ }} - Valerio Gentile
这个网站是一个方便的参考,可以查看所有用户代理字符串的排列组合:http://www.useragentstring.com/pages/Internet%20Explorer/ - Drew

8

我最近遇到了同样的问题。我还发现一些条件注释可以工作:

  • gtlt运行良好
  • gtelte从未工作过

因此,一个潜在的解决方案是改变条件语句,使用gtlt运算符。

另一种选择是使用像browserstack这样的服务,我认为更有用。


4

我曾经遇到过同样的问题 - 它让我整个上午都感到很疯狂。我添加了Modernizr,并选择了所有选项,包括yepnope.js。

所以现在我的测试看起来像这样:

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

在这种情况下,我测试画布(在Internet Explorer 9之前不支持),所以我加载了我的条件内容。现在,在Internet Explorer 11开发人员工具中切换浏览器模式时,它可以正常工作。

条件注释不依赖于脚本或任何第三方代码。 - Walf
@Walf - 是的,但它们也不受IE支持。请参见此处:http://msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx - El Kabong

3

我在这里没有看到提到,但在这个错误报告中指出,如果更改兼容性视图设置,则条件注释将按预期工作。所以:

  1. 在IE11中,单击“工具”
  2. 选择“兼容性视图设置”
  3. 输入网址并单击添加

现在在我的本地主机上似乎很好用。虽然我没有进行过全面测试,但也许对某些人有所帮助。


但是,您网站的访问者必须执行相同的操作才能获得相同的结果,这使其变得无用。 - paddotk
是的。但这只适用于通过IE11开发者工具测试旧版本的IE。所以使用IE11但运行为IE8时,条件注释将不起作用。对于实际使用IE8的用户,条件注释将会生效。可能会让人开心 ^_^ - user651390

1
一些条件注释是有效的,比如“gt”和“lt”,但例如“<!--[if IE 8]>”无效。这对于想在不同版本的Internet Explorer浏览器上尝试网页外观的开发人员来说确实很不方便,但并非完全没有好消息。
尽管条件注释无效,您仍然可以逐个附加样式表来测试每个Internet Explorer版本中您的网页的外观:假设您有一个Firefox,Chrome,Internet Explorer 10和Internet Explorer 11的样式表称为“screen.css”,另一个仅用于Internet Explorer 9的样式表称为“screen-ie9.css”,还有仅用于Internet Explorer 8的样式表称为“screen-ie8.css”。
要仅针对Internet Explorer 9测试您的网页,请执行以下操作:
<link rel="stylesheet" href="path/css/screen.css"     type="text/css" />
<link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />

在F12开发者工具中,选择“仿真”部分,将“文档模式”设置为“9”,将“用户代理字符串”设置为“Internet Explorer 9”。文档模式是Internet Explorer 9 使用的标准,而用户代理字符串是浏览器本身。

附言:我假设“screen.css”是你的基本样式表,这就是我先调用它而后再通过调用“screen-ie9.css”来实现覆盖Internet Explorer 9修复的原因。

通过这样做,您可以“确保”(我必须使用虚引号测试才能写出“确保”一词),您正在Internet Explorer 9浏览器上查看您的网页。当您完成在Internet Explorer 9上的测试和样式设计,并且想要在Internet Explorer 8上进行测试时,您可以通过替换此项轻松地执行相同的操作:

<link rel="stylesheet" href="path/css/screen-ie9.css" type="text/css" />

使用这个:
<link rel="stylesheet" href="path/css/screen-ie8.css" type="text/css" />

因此,这只是微软方面的小麻烦,但新的 F12 开发人员工具提供了许多惊人的功能,这使得这并不是一个大问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接