21

这让我发疯。

不管我怎么尝试,Internet Explorer 都在切换到 IE7 标准文档模式。我尝试使用 HTML5 样板和 HTML5 重置(其自己的网站进入 Quirks 模式)将我的代码剥离为空,以使其正常运行。

我还添加了元标记,无论如何都应该强制 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>

编辑

我通过以下建议找到了解决方案。这个建议没有奏效,但它确实让我找到了答案。这可能不是 100% 适合所有人,因为它在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>
4

8 回答 8

10

这个线程

X-UA-Compatible 元标记必须直接出现在元素中的标题之后。不能在它之前放置其他元标记、css 链接和 js 脚本调用。

于 2012-10-11T10:51:41.097 回答
10

我通过较早的建议找到了解决方案。这个建议没有奏效,但它确实让我找到了答案。这可能不是 100% 适合所有人,因为它在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>

编辑

我实际上已经停止使用上述内容,现在html按照 HTML5BP 中的建议将我的 IE 特定类添加到元素中。

另请注意,您可能希望chrome=1从元标记中删除,因为 Chrome Frame 即将被杀死。但是对于那些仍然有人使用它的罕见情况,保留它并没有什么坏处。

另一件我认为没有被提及的检查是 IE 中可能最烦人的设置的状态 - “在兼容性视图中显示 Intranet 站点”。如果您运行一个名称如http://mytestserver:8888IE 的测试服务器,则无论您在文档头中做什么,都会认为它是一个 Intranet 站点并切换模式。

此设置在我公司的组策略中启用,因为我们古老的 Sharepoint Intranet 实际上依赖于它。非常适合旧垃圾,但对于实际上要遵守标准的新东西来说却很糟糕。

如果您有任何旧站点,请关闭该 f***erTools > Compatibility View Settings并准备手动切换到它。

于 2012-10-11T11:21:00.850 回答
8

有时 IE 在 Intranet 站点上的行为特别糟糕,无论<meta>头部的行如何,都会迫使它们进入兼容模式。但是,您可以通过将以下内容添加到 Web 配置中,使服务器向暴力 IE 发送标头:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="X-UA-Compatible" value="IE=Edge" />
      </customHeaders>
    </httpProtocol>
</system.webServer>
于 2012-10-11T10:57:23.333 回答
3

Umesh P 在这个线程上的回答对我有用。

http://answers.microsoft.com/en-us/ie/forum/ie9-windows_7/ie9-always-rendering-pages-in-ie7-compatibility/c0177b44-3950-e011-8dfc-68b599b31bf5

于 2013-05-08T19:32:36.223 回答
3

保持

<!doctype html>

要成为页面源的第一行,并且 X-UA-Compatible 元标记必须是倾斜标记的相邻下一个兄弟。

<meta charset="utf-8">
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
于 2013-09-25T08:39:03.400 回答
2

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

于 2012-11-08T01:55:12.003 回答
0

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

于 2013-05-16T14:21:46.390 回答
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"/>

其他人将不得不评论为什么这似乎有效——这对我来说是个谜。

于 2014-02-11T22:49:18.090 回答