HTML Doctype设置/ IE Quirks模式

时间:2010-05-05 03:16:51

标签: javascript html internet-explorer doctype quirks-mode

我在一个无法访问的开发人员的参数范围内工作,他们为我们的产品创建了一个html生成系统。每当生成一个新页面时,他就会放置:

<!-- updated page at 05/MAY/2010 02:58.58 -->
<!-- You must use the template manager to modify the formatting of this page. --> 

导致我的代码看起来像:

<!-- updated page at 05/MAY/2010 02:55.30 -->
<!-- You must use the template manager to modify the formatting of this page. -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

我不相信IE会读取这个doctype,因为在查看开发人员屏幕时,它会以Quirks模式呈现......有没有其他方法可以迫使IE退出这个可怕的Quirks模式?我一直试图联系开发人员,但他一直很不可用..

提前感谢您提供任何帮助。

//编辑:

这可以通过javascript进行,使用on load命令点击父页面吗?

5 个答案:

答案 0 :(得分:2)

你无能为力。您的内容管理系统失败。您需要找到开发人员并让他们修复此故障系统或获取新的内容管理系统。

答案 1 :(得分:2)

您可以通过添加

强制IE使用标准模式
<meta http-equiv="X-UA-Compatible" content="IE=8" />

到HTML的head部分的开头,或者您可以通过服务器配置添加等效的HTTP头。但这仅适用于IE8或更高版本。

答案 2 :(得分:0)

如何生成页面?

如果您使用的是PHP,则可以使用输出缓冲来保持模板注释的输出。

答案 3 :(得分:0)

如果您仍然坚持使用该代码,那么为什么不在构建过程中添加最后一步,删除这些注释呢?

答案 4 :(得分:0)

是的,这是可能的,但这是一件非常糟糕的事情。

UPD。抱歉,不行不通。

但在某些情况下,我们根本无法控制向用户提供的内容。典型情况:贵公司因某些法律原因有义务使用的支付网关。它们允许您设置页面样式并将自己的内容放入其中,但它们不允许更改或如何设置doctype(并且它根本没有设置!)。

所以,受到这个链接的启发:http://www.webmasterworld.com/forum91/4856.htm和美化解决方案可能是这样的(把它放在你的结束体标记</body>之前):

<!--[if IE]>
<script>
!function() {
var doctype = "<!DOCTYPE html>",
    headHTML = document.head.outerHTML,
    bodyHTML = document.body.outerHTML;

window.doctypeSet = false;

if (window.doctypeSet) return;
setTimeout(function(){
  document.write(
    doctype + 
    "<html>" + 
    headHTML + 
    bodyHTML +
    "</html>"
  );
  window.doctypeSet = true;
}, 0);

}();
</script>
<![endif]-->

但是,您可能还想将<!--[if IE]>更改为<!--[if lte IE 9]>之类的内容,以便IE10及更高版本不会执行这种肮脏的舞蹈。我不确定如果doctype不存在,IE10是否也会切换到quirksmode,如果它没有切换,那么就没有必要在那里调用这个代码。