为什么即使在模拟Internet Explorer 8文档模式时,Internet Explorer 11也不接受条件注释?


110

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

为什么会这样?是虫子吗?

如果您认为这确实是一个需要修复的错误,请进入并说您也可以在针对此问题而报告的Microsoft错误报告中重现此错误:
通过F12 Developer模拟文档模式时,条件注释不起作用工具

更新:已报告该问题在提到的错误报告中已得到解决。


18
问我自己同样的问题!我知道他们在IE10中删除了条件注释,但是恕我直言,模拟器在测试较旧的浏览器时应考虑它们。
2013年

12
确实,这使该功能无法使用。
thasmo

3
真正的问题是为什么要使用兼容模式?我的建议是避免像瘟疫这样的兼容模式。不管您所描述的问题是什么,它当然都不适合测试,因为已知的错误和怪癖可以一直追溯到他们首次引入兼容模式时。如果要测试向后兼容性,则确实需要使用IE8(和IE9等)的真实副本。转到modern.ie并下载它们提供的用于测试的VM。
Spudley13年

19
IE错误跟踪器上存在一个错误。我鼓励所有人访问并告诉Microsoft您可以重现此内容。connect.microsoft.com/IE/feedback/details/806767/…–
Evgeny

15
我认为使用兼容模式进行测试比为每个浏览器下载1/2 GB左右的映像更有意义。因此,这里有一些错误,(可能是其中之一),但是有99%的时间会起作用。
罗尔夫(Rolf)2013年

Answers:


29

根据Jacob Rossi [MSFT]

这应该在上周发布的 IE11更新1中修复。

该信息发布于2014年4月22日。

我自己进行了一些测试,似乎确实已修复,所有功能都再次正常运行,以测试有史以来最出色的浏览器... Internet Explorer!


4
这需要更多的支持。为了到达这里,我不得不仔细研究两个堆栈溢出的答案。
Tek

@Lynda:您能发布您的IE11版本吗?我的is11.0.9600.17631
Mohamed Hussain

1
@MohamedHussain-我的版本是11.0.9600.17690IC。
L84

3
你必须是撒谎。
paddotk 2015年

IE是“最令人赞叹的浏览器”吗?
Paddotk

20

我只是尝试在Windows 7的Internet Explorer 11中使用它,以确保为Internet Explorer 8及更低版本(通过条件注释)创建了我使用的HTML5语义元素,并且浏览器只是忽略了它们。-_-

此功能在Internet Explorer 10中可以很好地工作,而Microsoft只需要修改它,不是吗?

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

除此之外,我实际上很享受Internet Explorer的改变。


4
是的,对于所有实际可用的动画,IE 11都是更好的体验:)。是的,仅当用户开始习惯使用MS时,MS才会对其进行“修补”。看看他们对Windows XP所做的事情……有人说“修复未损坏的东西”。无论如何,糟透了
Rolf

9
Internet Explorer浏览器是如此糟糕。版本之间没有一致性。到底是谁开发的?甚至我的祖母也可以做得更好!
Adrien Be 2014年

4
编辑:自2014
Adrien Be

@AdrienBe好吧,这肯定是朝正确方向迈出的一步。
DylRicho 2014年

1
@Anthony我的答案不正确?为何如此?基本上是说您刚才说的话。
DylRicho 2014年

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 2014年

为此,IE 11不遵守旧的有条件方法。<!-[如果是IE]>
吉诺2015年

8

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

  • gt并且lt工作正常
  • gtelte从未工作

因此,一种可能的解决方案是更改条件语句以使用gtlt运算符。

我发现更有用的另一种选择是使用诸如browserstack之类的服务。


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 2014年

@mgutt你是对的。仿真中有两个选项-文档模式和用户代理。文档模式更改浏览器的工作方式以及页面呈现方式,用户代理更改浏览器告知站点有关浏览器版本的信息。(在我的示例中,包含此信息的是$ _SERVER ['HTTP_USER_AGENT']变量)因此,基本上,您需要将这两个选项都更改为IE8。
Andrei Konstantinov

@安德鲁谢谢。现在我找到了设置。问题是德语翻译。他们用“ Zeichenfolge des Benutzer-Agents”翻译了“用户代理”,我认为这意味着字符集。有些事情不应该翻译;)
mgutt 2014年

2
这个解决方案是最好的。我已经将其转换为ASP.NET MVC Razor,并且可以完美运行:@ {if(Request.UserAgent.Contains(“ MSIE 8.0”)){/ *此处的元标记* /}}
Valerio Gentile,2014年

该网站是有关用户代理字符串的所有排列形式的方便参考: useragentstring.com/pages/Internet%20Explorer
Drew

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开发人员工具中切换浏览器模式时,此方法有效。


条件注释不依赖脚本或任何第三方代码。
沃尔夫2014年

@Walf-是的,但是IE中也不支持它们。参见此处:msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
El Kabong 2015年

3

我没有看到这里提到的内容,但是在此错误报告中,请注意,如果您更改兼容性视图设置,则条件注释会按预期工作。所以:

  1. 在IE11中,点击“工具”
  2. 兼容性视图设置
  3. 输入URL,然后单击添加

看起来现在可以在我的本地主机上正常工作了。我没有对此进行广泛的测试,但是也许会对某人有所帮助。


但是您网站的访问者必须做同样的事情才能获得相同的结果。使其无用。
paddotk

是。但这是用于如果您正在通过IE11开发人员工具测试IE的较早版本。因此,使用IE11但以IE8运行时,条件注释将不起作用。对于实际使用IE8的用户,条件注释将起作用。可能是^ _ ^
普通高

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使用的标准,而用户代理字符串是浏览器本身。

PS:我假设“ screen.css”是您的基本样式表,这是我首先调用它的原因,而不是“覆盖” Internet Explorer 9之后通过先调用“ screen-ie9.css” 修复的问题。

这样,您可以“确定”(我必须对VM进行测试才能写出“ sure”一词而不加引号),您正在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开发人员的工具提供了许多令人惊叹的功能,这并没什么大不了的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.