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



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

为什么会这样?这是一个错误吗?

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

更新:此问题已在上述错误报告中报告已修复。

根据Jacob Rossi [MSFT]

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

该公告发布于2014年4月22日。

在我自己运行一些测试时,似乎这确实已修复,并且一切再次顺利运行,以测试有史以来最令人惊叹的浏览器......IE浏览器!

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

这个功能在Internet Explorer 10中运行良好,Microsoft只需要修补它,不是吗?

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

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

这对我有用,似乎是最优雅/最简单的修复(我想 Internet Explorer 10 和 Internet  Explorer  11 是唯一支持 -ms-high-contract 的浏览器):

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

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

  • gtlt工作正常
  • gtelte从未奏效

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

另一种选择,我发现更有用,是使用像浏览器堆栈这样的服务。

我有另一种解决方案。

打开了 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" />');
}

我遇到了同样的问题 - 它让我整个早上都发疯。我添加了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 开发人员工具中切换浏览器模式时,此功能将正常工作。

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

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

现在似乎在我的本地主机上工作正常。我没有对此进行广泛测试,但也许它会帮助某人。

一些条件注释可以工作,例如 ' gt ' 和 ' lt ',但例如 <!--[if IE 8]>不起作用。对于想要尝试其网页在不同版本的Internet Explorer浏览器上的外观的开发人员来说,这肯定是不方便的,但这并不全是坏消息。

尽管条件注释不起作用,但您仍然可以通过一次附加一个样式表来测试网页在每个 Internet Explorer 版本中的外观:假设您有一个名为"screen.css"的 Firefox、Chrome、Internet Explorer 10 和 Internet Explorer 11 样式表,以及另一个仅适用于 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"是你的基本样式表,这就是为什么我首先调用它而不是稍后通过调用"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" />

因此,这只是Microsoft方面的一个小不便问题,但是新的 F12 开发人员的工具提供了许多惊人的功能,这使得这没什么大不了的。

最新更新