为什么`<![endif] - >`出现在IE渲染的页面上?

gov*_*nda 21 html internet-explorer

这已经得到了被真正愚蠢的.但一遍又一遍地读同一个非常简单的答案在各种博客和微软网站之后,该AFAICT我这样做是正确的,我还是难倒了,所以我在这里问:

当在本地网络上查看时,为什么此测试页中的IE条件呈现IE中页面<![endif]-->底部的文字?我很确定这是IE'Downlevel-hidden条件评论'的正确语法.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>IEconditionalSyntax_wtf.html</title>
</head>
<body>
    well?<br>
    <!--[if IE]>
        wtf?!
    <![endif]-->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

更新:

节省阅读所有评论的时间...如果你遇到同样的问题:下面的大多数评论基本上只是提出可能的(但不确定的,无效的)解释,并且有几个人报告说他们无法重现这个问题.到目前为止,似乎没有人知道答案.我只在IE9/Win7(有任何浏览器/文档模式)上查看页面时看到问题...在我的本地服务器上(本地iMac 10.6.8提供的页面,内置于web服务器中).

但是,仅仅因为没有人能够摆脱我的本地服务器这个问题并不一定意味着以下建议不会为您解决问题.在我们知道答案之前,我认为假设任何事都没有用.所以你可能想尝试下面列出的所有内容,如果你也在<![endif]-->IE页面上出现,似乎没有充分的理由.

Patrick提供了一个很好的解决方法,但它确实依赖于jquery.

我辩论是否奖励赏金(我开始,并于2012年4月16日到期),或接受答案,以便确认到期时它被授予......并且我没有明确的行动..所以我刚决定让系统自动奖励帕特里克的一半奖金,以获得伟大的(虽然是jquery)解决方案.我不想给予全部赏金,因为赏金的全部意义在于满足了我对于为什么我首先看到条件评论的好奇心.我也不想接受任何答案(到目前为止),因为在这种情况下我不会使用任何解决方法,因为问题只出现在我的本地网络上,因此与世界上的生产代码无关.

Pat*_*ott 5

IE10不支持条件注释,所以我建议使用不同的方法.

Javascript适用于此.

以下是我的工作,很容易使用,需要jquery

var userAgent, version;

if ($.browser.msie) {
  version = "ie" + $.browser.version.substring(0, 1);
  $("body").addClass("ie " + version);
} else if ($.browser.mozilla) {
  $("body").addClass("mozilla");
  if (navigator.userAgent.toLowerCase().indexOf('firefox') !== -1) {
    userAgent = navigator.userAgent.toLowerCase();
    userAgent = userAgent.substring(userAgent.indexOf('firefox/') + 8);
    userAgent = userAgent.substring(userAgent.indexOf('firefox/'), userAgent.indexOf('.'));
    version = "ff" + userAgent;
    $("body").addClass(version);
  }
} else if ($.browser.opera) {
  $("body").addClass("opera");
} else if ($.browser.webkit) {
  $("body").addClass("webkit");
}
Run Code Online (Sandbox Code Playgroud)

然后你可以写这样的css:

span.something { width: 30px; }
.ie7 span.something {width: 25px;}
Run Code Online (Sandbox Code Playgroud)

而且,更好的是,将它与modernizr结合使用,您也可以根据功能支持编写规则.请注意,这些是全局js变量,因此您甚至可以将它们用于基于浏览器的不同功能.比如,如果你需要写一个ie7 hack或者其他东西.

编辑:用更简洁的版本替换代码,结果相同


Chr*_*non 4

我在工作 atm 处处理类似的问题。

我建议在关闭内联网自动检测的情况下再次测试它:

通过 IE 中的工具菜单或控制面板访问 Internet 选项

另外,所有兼容模式设置均设置为关闭

再加上元标记 IE=edge

我认为它可以解决这个问题 - IE 是一个奇怪的野兽!