如何判断浏览器是否处于“怪癖”模式?

假设你有一个相对严格的doctype和HTML标记的页面,这个页面非常接近兼容,但也许会因为用户内容超出你的控制范围而错过了一些愚蠢的方式……假设你正在处理一个内容pipe理系统或内容pipe理系统的主题,在这里你可以控制一些基本的结构,并且需要一些JavaScript,但是你不需要为页面上的其他内容负责。

当浏览器决定进入“怪癖”模式而不是使用更符合标准的引擎时,你怎么知道(或者:将会决定什么)?

我正在为每个主要的浏览器寻找答案,因为IE,Chrome,Safari和Firefox当然都会有不同的处理方式。 是一个单一的错误足以强制它,或者你有一些余地?

Firefox和Opera中,您可以通过检查页面信息来确定您的浏览器是否处于“怪异模式”。

使用document.compatMode ,会告诉你你在大多数浏览器中使用的模式。

Chrome,Safari和IE中 ,在地址栏中运行此JavaScript:

  javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.') 

(请注意,由于最近的安全更改,您需要在粘贴到地址栏后重新键入javascript:部分)

正如你可以在JavaScript中查询渲染模式,你可以有一个Bookmarklet ,它会告诉你一个页面正在使用的渲染模式。

我发现这个渲染模式书签 ,这对我很好:

 javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.'); 

对“你是否有一个单一的错误足以迫使它,或者你有一些回旋余地?”的具体问题的完整答案? 这完全取决于错误。 例如,

 <!-- Comment --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

将强制在IE 6和7中的怪癖模式,尽pipe没有真正发生错误(当文件的第一行不是一个声明时,它们只是抛出一个总的摇摆不定)。 types/怪癖的快速列表可以在这里find

尝试在您的HTML中粘贴以下行进行testing(非常糟糕的JavaScript行为我在这里传递 – 对不起…确保这永远不会现场:)

 <a href="javascript:alert(document.compatMode);">What mode am I?</a> 

根据http://www.quirksmode.org/css/quirksmode.html :“问题是用怪癖模式写的一些网页有doctypes,因此每个浏览器都有自己的列表和doctypes触发quirks模式。这些列表的概述比较图表: http : //hsivonen.iki.fi/doctype/ “

希望这可以帮助

如果你告诉IE它应该是严格的(通过文档types),它不会在页面的中途改变主意。

如果我正确理解怪癖模式,那么不对其声明的doctype进行validation的页面不足以触发怪癖模式。 它只是不会正确显示。

我find了最好的资源来确定不同的浏览器如何处理每个文档types在这里 。

对于带有Web Developer Toolbar的Firefox,可以查看该栏右侧的三个图标。 最左边的一个告诉你你在哪个模式。

在IE中,你会看到它在开发工具(按F12),它在菜单中说:文档模式:…你也可以在那里强制一个不同的模式。

在html5页面中,写“ <!DOCTYPE html> ”页面可以改成document.compatMode ='CSS1Compat'