IE9无论我怎么做都会持续使用IE7标准文档模式

21

这真的让我发疯了。

无论我尝试什么,Internet Explorer都会切换到IE7标准文档模式。我已经尝试将代码精简至最少以使其正常运行,使用HTML5模板和HTML5重置(它们自己的网站进入了奇怪模式)。

我还添加了一个meta标签,据说可以强制IE使用最新版本,但这只会使我的标记被W3C视为无效。

这就是我拥有的内容,我错过了什么?

<!doctype html>

<!--[if IE 7 ]> <html class="ie7> <![endif]-->
<!--[if IE 8 ]> <html class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title></title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <p>Test text</p>        
</body>
</html>

编辑

我通过下面的建议找到了一个解决方案。虽然这个建议并没有起作用,但它确实帮助我找到了答案。 这种解决方案可能并不适用于所有人,因为它在body标签上强制使用了一个类而不是html,但对我来说它有效,并且似乎对IE也有效。

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <link rel="stylesheet" href="css/style.css">
</head>
<!--[if IE 7 ]> <body class="ie7> <![endif]-->
<!--[if IE 8 ]> <body class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><body><!--<![endif]-->
<p>Test text</p>        
</body>
</html>

这在我的Windows7上的IE9中运行得非常好。它显示IE9标准模式是页面默认模式和正在使用的模式。你的IE9是否将页面默认设置为IE7? - andyb
你的网站是否在IE设置中的“内部网区域”? - one.beat.consumer
只是出于好奇,开发者工具是否显示页面默认为IE9标准,但仍在使用IE7?这就是我的情况,我正在尝试您的解决方案,但错误不一致,所以我还不确定是否已经解决了... - Sabrina Leggett
8个回答

10

我有一个解决方案,是通过早期建议找到的。那个建议并没有奏效,但却让我找到了答案。可能不是对每个人都适用,因为它将一个类强加到了 body 标签上而非 html,但对我有效,并且似乎在 IE 上也有效。

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <link rel="stylesheet" href="css/style.css">
</head>
<!--[if IE 7 ]> <body class="ie7> <![endif]-->
<!--[if IE 8 ]> <body class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><body><!--<![endif]-->
<p>Test text</p>        
</body>
</html>

编辑

我已经停止使用上述方法,现在将我的IE特定类添加到html元素中,正如HTML5BP建议的那样。

另外要注意的是,由于Chrome Frame即将被淘汰,您可能希望从标记中删除chrome=1。但对于仍在使用Chrome Frame的极少数情况,保留它也没有问题。

还有一件事需要检查,我认为还没有人提到过,那就是IE中最让人恼火的设置状态 -“在兼容性视图中显示企业网站”。如果您使用类似http://mytestserver:8888的名称运行测试服务器,IE将认为它是一个企业内部网站,并无视您在文档头中所做的任何设置而切换模式。

在我们公司的组策略中启用了此设置,因为我们的古老的SharePoint企业内部网实际上依赖于它。这对于旧垃圾来说很棒,但对于实际上将遵循标准的新东西来说却很糟糕。

工具 > 兼容性视图设置中关闭该设置,并准备好在您有任何遗留网站时手动切换到该设置。


10

这个帖子来看,X-UA-Compatible元标记必须出现在head元素中的标题后面,且不能在其前面放置其他任何meta标记、CSS链接和JS脚本调用。


2
我尝试了你建议的方法,但不幸的是没有任何改变。然而,这确实让我找到了答案。我正在使用条件注释在我的html标签上强制添加一个类,以便我可以为旧版本的IE适应我的CSS。结果发现条件注释不能在head之前使用,所以我只需将条件注释移到body标签即可。它很好地工作,我仍然可以自定义我的CSS。谢谢。 - Alan Shortis
@AlanShortis 请将此作为您自己问题的答案发布。这是正确的正式方式。 - Markus Unterwaditzer
@Markus 已完成。再次感谢您指引我正确的方向。 - Alan Shortis
@AlanShortis 我想你已经知道了,但如果你不知道,你也应该选择你的答案。 - Anoop
@Shusl - 我会的,但由于某些原因我要等2天才能做到! - Alan Shortis

8
有时,IE在内部网站上的表现非常差,无论中是否存在行,它都会将其强制转换为兼容模式。但是,您可以通过将以下内容添加到Web配置文件中,让服务器发送一个头信息来强制IE行为良好:
<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-UA-Compatible" value="IE=Edge" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

谢谢你的回复,虽然这不是解决我当前问题的方法,但我确实有一些内部网络的工作需要做,我会确保使用这个方法。 - Alan Shortis

3
保持

<!doctype html>

网页源代码的第一行必须是文档类型声明,而X-UA-Compatible元标记必须作为标题标记的相邻下一个兄弟节点。

<meta charset="utf-8">
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">


2

我也遇到了IE10在本地主机上强制使用IE7标准模式的问题。 添加/使用一个包含点号的虚拟主机(local.x)解决了这个问题。


内部网区域对呈现的影响信息:http://msdn.microsoft.com/zh-cn/library/jj676914(v=vs.85).aspx - Ates Goral

0

Stuart发布的链接对我起作用了,因为它与本地网站设置兼容模式有关。一旦我将内部网站从兼容性模式列表中移除,页面就会根据元标记进入正确的IE=9模式。


0

当IE8以IE7标准文档模式呈现时,尽管我尝试了其他一切,但我使用了以下内容来解决这个问题。在doctype声明之前添加以下内容:

<!--[if IE ]><![endif]-->

因此,生成的HTML将类似于以下内容:

<!--[if IE ]><![endif]-->
<!doctype html>
<!--[if IE 7]><html class="lt-ie8"><![endif]-->
<!--[if IE 8]><html class="lt-ie9"><![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->
<head>
    <title>Page title here</title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

关于为什么这似乎有效,其他人需要发表评论——对我来说这是个谜。


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