我正在使用新的 Internet Explorer 11 开发者工具将文档模式切换到“8”,但条件注释仍然被忽略,也就是说,它们没有被正确解析并且表现得像普通注释。因此,浏览器不会请求/加载条件注释中的任何引用文件。
为什么会这样?它是一个错误吗?
如果您认为这确实是一个需要修复的错误,请进入并说您也可以在针对此问题报告的 Microsoft 错误报告中重现此问题:
Conditional comments do not work when emulating document modes via F12 Developer Tools。
更新:已报告此问题已在上述错误报告中得到修复。
According 到 Jacob Rossi [MSFT]
这应该在上周发布的 IE11 更新 1 中得到修复。
发布于 2014 年 4 月 22 日。
在我自己运行的一些测试中,这似乎是固定的,并且一切都再次顺利运行,以测试有史以来最令人惊叹的浏览器......Internet Explorer!
我刚刚尝试在 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 */
}
我最近遇到了同样的问题。我还发现一些条件注释有效:
gt 和 lt 工作正常
gte 和 lte 从来没有工作过
因此,一种可能的解决方案是将条件语句更改为使用 gt
和 lt
运算符。
另一种我发现更有用的替代方法是使用像 browserstack 这样的服务。
我对此有另一种解决方案。
启用 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 开发人员工具中切换浏览器模式时有效。
我没有看到这里提到它,但是在这个 bug report 中注意到,如果您更改兼容性视图设置,条件注释将按预期工作。所以:
在 IE11 中,点击“工具” 兼容性视图设置 输入 URL 并点击添加
现在似乎在我的本地主机上工作正常。我没有对此进行过广泛的测试,但也许它会对某人有所帮助。
一些条件注释可以正常工作,例如“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 稍后通过调用'{2 }' 第二。
通过这样做,您可以“确定”(我必须使用虚拟机进行测试才能写出不带引号的“确定”一词)您正在 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 开发人员工具提供了许多令人惊叹的功能,这使得这没什么大不了的。