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

时间:2009-03-09 16:57:55

标签: html browser quirks-mode

假设您有一个页面具有相对严格的文档类型和HTML标记非常接近合规,但可能会以一些愚蠢的方式错过,可能是因为用户内容超出您的控制...说您正在工作在内容管理系统或内容管理系统的主题上,您可以控制一些基本结构并需要一些javascript,但是您不对其他所有内容负责。

当浏览器决定进入“怪癖”模式而不是使用更符合标准的引擎时,您如何判断(或:将决定什么)?

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

9 个答案:

答案 0 :(得分:153)

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

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

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

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

(请注意,由于最近的安全性变化,您需要在粘贴到地址栏后重新输入javascript:部分。

答案 1 :(得分:19)

由于您可以在JavaScript中查询渲染模式,因此可以使用Bookmarklet来告诉您页面使用的渲染模式。

我发现this render mode bookmarklet适用于我:

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

答案 2 :(得分:11)

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

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

将强制IE 6&amp; 7尽管没有真正出现错误(当文件的第一行不是声明时,它们只是完全摇摆不定)。 可以找到类型/怪癖的快速列表here

尝试在HTML中粘贴以下行以进行测试(非常糟糕的javascript行为我在这里传递 - 抱歉...确保它永远不会生效:)

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

答案 3 :(得分:4)

根据http://www.quirksmode.org/css/quirksmode.html: “问题在于,一些以怪癖模式编写的页面确实有doctypes。因此每个浏览器都有自己的列表,其中包含触发怪癖模式的文档类型。有关这些列表的概述,请参阅此浏览器比较图表:http://hsivonen.iki.fi/doctype/

希望这有帮助

答案 4 :(得分:3)

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

答案 5 :(得分:2)

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

我发现用于确定不同浏览器处理每种文档类型的最佳资源是here

答案 6 :(得分:2)

对于添加了Web Developer Toolbar的Firefox,您可以查看栏右侧的三个图标。最左边的一个告诉你你处于什么模式。

答案 7 :(得分:2)

在IE中,您将在开发人员工具中看到它(按F12),它在菜单中显示:文档模式:... 你也可以在那里强制使用不同的模式。

答案 8 :(得分:0)

在html5页面中,写入“<!DOCTYPE html>”从页面开始可以更改为 document.compatMode = 'CSS1Compat'