我正在编写一个在IE7标准模式和IE8标准模式下运行良好的前端。
当我启动Internet Explorer并加载页面时,IE7和IE8都直接进入Quirks模式。如何强制IE7和IE8始终在标准模式下加载页面?
到目前为止,我没有添加任何特殊的元标记。
谢谢你的协助
编辑:我的doctype和head目前看起来如下:
<!DOCTYPE html>
<html lang="de">
<head>
<title>...</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="utf-8" />
<script src="js/html5.js"></script>
(...)
</head>
这是绝对肯定的方式:
<!doctype html> <!-- html5 -->
<html lang="en"> <!-- lang="xx" is allowed, but NO xmlns="http://www.w3.org/1999/xhtml", lang:xml="", and so on -->
<head>
<meta http-equiv="x-ua-compatible" content="IE=Edge"/>
<!-- as the **very** first line just after head-->
..
</head>
原因:
每当IE遇到任何冲突时,它都会回到“IE 7标准模式”,忽略了x-ua-compatible
。
(我知道这是一个非常古老的问题的答案,但我自己也在努力解决这个问题,并且以上方案是正确的答案。它一直有效,每次都有效)
可悲的是,他们希望我们使用标签让他们的浏览器知道该怎么做。看看this文档,它告诉我们使用:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
它应该做。
<!DOCTYPE html>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
添加正确的doctype声明并避免使用XML序言应足以避免使用quirks mode。
我知道这个问题是在2年前提出来的,但还没有人提到这个问题。
最好的方法是使用http标头
将元标记添加到头部并不总是有效,因为IE可能在读取之前确定了模式。确保IE始终使用标准模式的最佳方法是使用自定义http标头。
标题:
name: X-UA-Compatible
value: IE=edge
例如,在.NET应用程序中,您可以将其放在web.config文件中。
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
HTML5 Doctype可能会导致您使用这些旧浏览器时遇到问题。它也可以归结为与HTML5 shiv相关的时髦。
您可以尝试切换到其中一个XHTML文档类型并相应地更改标记,至少是暂时的。这可能会让您缩小问题范围。
当这些IE切换到怪癖模式时,你的设计是否破裂?如果它是你的CSS导致显示奇怪的东西,它可能值得在CSS上工作,所以即使浏览器切换模式,网站看起来也一样。