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

时间:2012-03-25 03:10:22

标签: html internet-explorer

得到真是愚蠢......但是在各种博客和微软网站上一遍又一遍地阅读同样非常简单的答案后,AFAICT我做得对,我还是难倒,所以我在这里问:

为什么此测试页中的IE条件呈现IE中页面底部的文字<![endif]-->在本地网络上查看时?我很确定这是IE&#39; 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>

更新

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

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

帕特里克给出了一个很好的解决方法,但它确实依赖于jquery。

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

8 个答案:

答案 0 :(得分: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");
}

然后你可以像这样写css:

span.something { width: 30px; }
.ie7 span.something {width: 25px;}

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

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

答案 1 :(得分:4)

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

我建议再次测试内网自动检测:

Access Internet Options via Tools menu in IE or via the Control Panel

此外,所有兼容模式设置都设置为关闭

另外还添加了元标记IE = edge

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

答案 2 :(得分:2)

这是因为IE在本地网络上默认为兼容性视图:

  

在企业内部网上找到许多站点(读取:本地网络,如   http://myPortalSite)今天能够满足Internet Explorer 7的需求   “IE”就像IE7一样。为了保持与这些的兼容性   业务线网站和应用程序,IE8默认为   在“本地Intranet”中显示内容时的兼容性视图   区。一个例外是'Localhost'和环回地址   (例如127.0.0.1 + IPv6等价物)。这些地址显示在IE8中   标准模式默认为了满足Web开发人员的需求   和经常测试用于互联网消费的页面的设计师   (本地Web服务器上默认使用IE8标准)。

     

用户可以通过取消选中来覆盖“本地Intranet”设置   '在工具中显示兼容性视图中的Intranet网站 - &gt;   兼容性视图设置。

http://blogs.msdn.com/b/ie/archive/2009/06/17/compatibility-view-and-smart-defaults.aspx

为了澄清,您看到这个是因为您使用192.168.x.x访问该站点,而我愿意打赌其他未看到此问题的人正在使用127.0.0.1/localhost。

答案 3 :(得分:2)

我添加了<!--<![endif]-->而不是<![endif]-->,它就消失了。

答案 4 :(得分:1)

当我在任何IE浏览器中显示条件语句时,条件语句出现在我的<head><![endif]-->中,我遇到了类似的问题,即使我上传了代码到服务器。

因为它是</head>之前的最后一行,所以我决定将我的打印css调用(我还需要做)转移到</head>和“瞧!”之前的最后一行。现在,<![endif]-->不再显示在IE中 - 即使在我的本地服务器上也是如此。

答案 5 :(得分:1)

HTML

<span class ="clean"><!--[if lt IE]></span>

<span class="clean"><![endif]--></span>

CSS

.clean { display: none; }

答案 6 :(得分:0)

条件评论仅由Internet Explorer提供,Internet Explorer 9及以上版本应该支持css中的大多数元素。评论将适用于所有版本的IE(最好与5和6一起使用)。

答案 7 :(得分:0)

我最近有同样的问题。 在我的情况下,冲突的代码是我在IE的条件语句中具有最低z-index的元素之一。 在按顺序设置它以使其不是最低z索引之后,它被修复了。