IE10正在读取IE8的条件注释

5

我的网页会在使用不支持的浏览器(IE<=8)时显示一个警告框。在IE 8及以下版本中可以正常工作,但是今天我在IE 10上测试发现它也读取了这个条件。它在不应该的情况下显示了警告框。我已经尝试了很多方法,但不知道问题在哪里。以下是一些代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="chrome=1"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
 ...
</head>
<!--[if lte IE 8]>
    <div style="position:absolute;bottom:0px;left:0px;background-color:orange;color:white;z-index:1000;width:250px;text-align:center;">This content is best viewed in Chrome, Firefox or any other Modern Browser. <br/><strong>Please Upgrade.  </strong></div>
<![endif]-->

它是否也能响应IE 10?你能制作一个“仅限IE 8而非IE 10”的条件吗? - Geeky Guy
6
这里的问题是IE10根本不应该看到任何条件注释。 - BoltClock
它能够看到它们,但不应该尝试解释它们。 - BoltClock
IE10即使明确与其他IE版本(如8和9)相关,仍会查看并解释条件注释中的内容。我该怎么做才能让IE10忽略这些注释?“<!--[if lt IE 9]> ... <![endif]-->"在IE 10中仍然触发,这很烦人。 - Jeremy Moritz
3个回答

4
抛个猜测,也许IE会因为你的两个X-UA-Compatible头部信息而感到困惑,因此自行回退到兼容视图。这是我能想到的IE10处理条件注释而不是直接忽略它们的唯一情况,因为在兼容视图中,它模拟IE7,即lte IE 8,因此会选择通过该条件注释隐藏内容。
请尝试将它们合并成一个单独的<meta>标签,看看会发生什么。
  <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />

说实话,我看不出为什么要有Chrome的入口;Chrome根本不会注意到它,即使它确实这样做了,你为什么想要它模拟Chrome版本1呢? - Spudley
@Spudley:该条目是针对Chrome Frame的;1表示当插件可用时,强制IE像Chrome一样运行。 - BoltClock
好的,Chrome Frame也已经被弃用了,但我认为它使用了frame=1.... 嗯,也许你是对的。我已经有一段时间没有使用它了。 - Spudley
在我的情况下,这似乎没有任何作用。IE10仍然存在问题。 - Jeremy Moritz

2
根据微软文档“条件注释”,IE10已移除了该功能。这意味着IE10会将“条件注释”跳过,仅视为注释(根据HTML规范它本来就是注释)。通过在IE10上测试代码,我确认了这一点。独立于浏览器模式设置,不会出现任何警告框。因此,实际页面可能存在某些语法错误,导致一些文本以普通内容而非“条件注释”的形式显示。

1
有趣的是,那里没有兼容性视图巫术。 (我不得不猜测,因为此时此刻我手头没有测试环境,可悲啊。) - BoltClock

0

所以我一直在调试和尝试修复代码,让它能够正常工作,我认为有两件事可能已经解决了问题。
首先:条件注释是在body标签打开之前声明的,我猜想由于它是一个div元素,它必须包含在body标签内。将其移动到body内部可能已经修复了它。
第二:我还在文档的头部有一个带有一些jQuery脚本的script标签。将此标签移动到body标签的末尾也可能已经解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接