为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?
Posted
技术标签:
【中文标题】为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?【英文标题】:Why doesn't Internet Explorer 11 honour conditional comments even when emulating Internet Explorer 8 document mode?为什么即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释? 【发布时间】:2013-10-27 02:46:26 【问题描述】:我正在使用新的Internet Explorer 11 开发人员工具将文档模式切换为“8”,但条件 cmets 仍然被忽略,也就是说,它们没有正确解析并且表现得像普通 cmets。因此,浏览器不会请求/加载条件注释中的任何引用文件。
为什么会这样?是bug吗?
如果您认为这确实是一个需要修复的错误,请进入并说您也可以在针对此问题报告的 Microsoft 错误报告中重现此问题:Conditional comments do not work when emulating document modes via F12 Developer Tools .
更新:已报告此问题已在上述错误报告中得到修复。
【问题讨论】:
问自己同样的问题!我知道他们在 IE10 中删除了条件 cmets,但恕我直言,模拟器应该在测试旧版浏览器时考虑它们。 确实,这使得该功能无法使用。 真正的问题是你为什么要使用兼容模式?我的建议是避免像瘟疫那样的兼容模式。无论您描述的问题如何,它肯定不适合测试,因为它存在已知的错误和怪癖,可以追溯到他们首次引入兼容模式时。如果您正在测试向后兼容性,您确实需要使用 IE8(和 IE9 等)的真实副本。转到modern.ie 并下载他们提供的用于测试的虚拟机。 在 IE 错误跟踪器上打开了一个错误。我鼓励大家访问并告诉微软你可以复制这个。 connect.microsoft.com/IE/feedback/details/806767/… 我认为使用兼容模式进行测试比为每个浏览器下载 1/2 GB 左右的图像更有意义。所以有错误,(这可能是其中之一),但 99.% 的时间它都能正常工作。 【参考方案1】:According 到 Jacob Rossi [MSFT]
这应该在 IE11 的更新 1 中修复,released last week。
发布于 2014 年 4 月 22 日。
在我自己运行的一些测试中,这似乎已经修复,并且一切都再次顺利运行,以测试有史以来最令人惊叹的浏览器......Internet Explorer!
【讨论】:
这需要更多的支持。为了到达这里,我不得不挖掘两个堆栈溢出的答案。 @Lynda:你能发布你的 IE11 版本吗?我的是11.0.9600.17631 @MohamedHussain - 我的版本是 11.0.9600.17690IC。 你必须讽刺。 关于 IE 是“最神奇的浏览器”?【参考方案2】:我刚刚尝试在 Windows 7 上的 Internet Explorer 11 中使用它,以确保为 Internet Explorer 8 及以下(通过条件 cmets)创建了我使用的 html5 语义元素,并且浏览器简单地忽略它们。 -_-
此功能在 Internet Explorer 10 中运行得非常好,微软只需要修改它,不是吗?
<!--[if lte IE 8]><script src="ie8-html5.js"></script><![endif]-->
除此之外,我实际上很喜欢 Internet Explorer,它带来了改变。
【讨论】:
是的,IE 11 是更好的体验,所有动画都可以正常工作:)。是的,当用户开始习惯它们时,MS 就有“修补”的历史。看看他们对 Windows XP 做了什么……“修复没有损坏的东西”,有些人会说。反正很烂 Internet Explorer 浏览器太糟糕了。版本之间没有一致性。这到底是谁开发的?甚至我的祖母也可以做得更好! 编辑:自 2014 年 1 月 22 日起,他们正在修复(或尝试)此问题connect.microsoft.com/IE/feedback/details/806767/… @AdrienBe 嗯,这肯定是朝着正确方向迈出的一步。 @Anthony 我的回答不正确?为何如此?它基本上是在说你刚才所说的。【参考方案3】:这对我有用,似乎是最优雅/最简单的修复(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 */
【讨论】:
太好了,谢谢。微软什么时候才能消除这种混乱? 为此,IE 11 不支持旧的条件方法。 【参考方案4】:我最近遇到了同样的问题。我还发现一些条件 cmets 可以工作:
gt
和 lt
工作正常
gte
和 lte
没用过
因此,一种可能的解决方案是将条件语句更改为使用 gt
和 lt
运算符。
我发现另一个更有用的替代方法是使用browserstack 之类的服务。
【讨论】:
【参考方案5】:我有另一个解决方案。
Internet Explorer 11 打开 Internet Explorer 8 兼容模式包含字符串“MSIE 8.0”,因此:
(php 示例)
if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE 8.0') !== false)
$head[] = sprintf('<link rel="stylesheet" href="ie8.css" />');
【讨论】:
我测试了文档模式,似乎没有改变用户代理?! @mgutt 你是对的。仿真中有两个选项 - 文档模式和用户代理。文档模式改变了浏览器的工作方式和呈现页面的方式,用户代理改变了浏览器告诉站点浏览器版本的方式。 (在我的示例中,它是包含此信息的 $_SERVER['HTTP_USER_AGENT'] 变量)所以基本上您需要将这两个选项都更改为,例如 IE8。 @安德鲁谢谢。现在我找到了设置。问题是德语翻译。他们将“用户代理”翻译为“Zeichenfolge des Benutzer-Agents”,我认为这意味着字符集。有些东西不应该翻译;) 这个解决方案是最好的。我已将其转换为 ASP.NET MVC Razor,它运行良好:@if (Request.UserAgent.Contains("MSIE 8.0")) /*your metatag here*/ 这个网站是用户代理字符串所有排列的方便参考:useragentstring.com/pages/Internet%20Explorer【参考方案6】:我遇到了同样的问题 - 整个早上都让我发疯。我添加了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 开发人员工具中切换浏览器模式时,此功能可以使用。
【讨论】:
条件 cmets 不依赖脚本或任何第三方代码。 @Walf - 是的,但 IE 也不支持它们。见这里:msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx【参考方案7】:我没有看到这里提到它,但是在这个bug report 中注意到,如果您更改兼容性视图设置,条件 cmets 将按预期工作。所以:
-
在 IE11 中,点击“工具”
兼容性视图设置
输入网址并点击添加
现在在我的本地主机上似乎工作正常。我没有对此进行广泛的测试,但也许它会对某人有所帮助。
【讨论】:
但是您网站的访问者必须这样做才能获得相同的结果。让它毫无用处。 是的。但这适用于您通过 IE11 开发人员工具测试旧版本的 IE。所以使用 IE11 但作为 IE8 运行,条件 cmets 将不起作用。对于实际使用 IE8 的人,条件 cmets 将起作用。应该是^_^【参考方案8】:一些条件 cmets 正在工作,例如 'gt
' 和 'lt
',但例如
<!--[if IE 8]>
不工作。对于想要尝试其网页在不同版本的 Internet Explorer 浏览器上的外观的开发人员来说,这无疑是不方便的,但这并不全是坏消息。
尽管条件 cmets 不起作用,但您仍然可以通过一次添加一个样式表来测试您的网页在每个 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 修复987654329@'秒。
通过这样做,您可以“确定”(我必须使用虚拟机进行测试才能写出不带引号的“确定”一词)您正在 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 开发人员工具提供了许多令人惊叹的功能,这让这没什么大不了的。
【讨论】:
以上是关于为啥即使在模拟 Internet Explorer 8 文档模式时,Internet Explorer 11 也不支持条件注释?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的页面无法在 Internet Explorer 中正确显示?
为啥在安装Windows Internet Explorer 7的时候,提示"此操作系统不支持Windows Internet Explorer 7.
为啥 .filter() 在 Internet Explorer 8 中不起作用?
为啥 Internet Explorer 6 在某些组织中仍然是企业的最爱? [关闭]