ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

如果您认为这确实是一个需要修复的错误,请进入并说您也可以在针对此问题报告的 Microsoft 错误报告中重现此问题:
Conditional comments do not work when emulating document modes via F12 Developer Tools

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

问自己同样的问题!我知道他们在 IE10 中删除了条件注释,但恕我直言,模拟器在测试旧版浏览器时应该考虑它们。
事实上,这使得该功能无法使用。
真正的问题是你为什么要使用兼容模式?我的建议是避免像瘟疫那样的兼容模式。无论您描述的问题如何,它肯定不适合测试,因为它存在已知的错误和怪癖,可以追溯到他们首次引入兼容模式时。如果您正在测试向后兼容性,您确实需要使用 IE8(和 IE9 等)的真实副本。转到 modern.ie 并下载他们提供的用于测试的 VM。
IE 错误跟踪器上有一个错误打开。我鼓励大家访问并告诉微软你可以复制这个。 connect.microsoft.com/IE/feedback/details/806767/…
我认为使用兼容模式进行测试比为每个浏览器下载 1/2 GB 左右的图像更有意义。所以有错误,(这可能是其中之一),但 99.% 的时间它只是工作。

L
L84

AccordingJacob Rossi [MSFT]

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

发布于 2014 年 4 月 22 日。

在我自己运行的一些测试中,这似乎是固定的,并且一切都再次顺利运行,以测试有史以来最令人惊叹的浏览器......Internet Explorer!


这需要更多的支持。为了到达这里,我不得不挖掘两个堆栈溢出的答案。
@Lynda:你能发布你的 IE11 版本吗?我的是11.0.9600.17631
@MohamedHussain - 我的版本是 11.0.9600.17690IC。
你必须讽刺。
关于 IE 是“最神奇的浏览器”?
P
Peter Mortensen

我刚刚尝试在 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,它带来了改变。


是的,IE 11 提供了更好的体验,所有动画都可以正常工作:)。是的,当用户开始习惯它们时,MS 就有“修补”东西的历史。看看他们对 Windows XP 做了什么……“修复没有损坏的东西”,有些人会说。反正很烂
Internet Explorer 浏览器太糟糕了。版本之间没有一致性。这到底是谁开发的?就连我奶奶也能做得更好!
编辑:他们自 2014 年 1 月 22 日起正在修复(或尝试)connect.microsoft.com/IE/feedback/details/806767/…
@AdrienBe 好吧,这肯定是朝着正确方向迈出的一步。
@Anthony我的回答不正确?怎么会这样?它基本上是在说你刚才所说的。
P
Peter Mortensen

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

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

太好了,谢谢。微软什么时候才能消除这种混乱?
为此,IE 11 不尊重旧的条件方法。

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

gt 和 lt 工作正常

gte 和 lte 从来没有工作过

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

另一种我发现更有用的替代方法是使用像 browserstack 这样的服务。


P
Peter Mortensen

我对此有另一种解决方案。

启用 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" />');
}

我已经测试了文档模式,它似乎没有改变用户代理?!
@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
P
Peter Mortensen

我有同样的问题 - 它让我整个早上都发疯了。我添加了 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 - 是的,但 IE 也不支持它们。见这里:msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
佚名

我没有看到这里提到它,但是在这个 bug report 中注意到,如果您更改兼容性视图设置,条件注释将按预期工作。所以:

在 IE11 中,点击“工具” 兼容性视图设置 输入 URL 并点击添加

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


但是您网站的访问者必须这样做才能获得相同的结果。使其无用。
是的。但这适用于您通过 IE11 开发人员工具测试旧版本的 IE。所以使用 IE11 但作为 IE8 运行,条件注释将不起作用。对于实际使用 IE8 的人,条件注释将起作用。应该是^_^
P
Peter Mortensen

一些条件注释可以正常工作,例如“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 开发人员工具提供了许多令人惊叹的功能,这使得这没什么大不了的。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅