134

假设您的页面具有相对严格的 doctype 和 HTML 标记,非常接近合规性,但可能会以一些愚蠢的方式遗漏,可能是因为用户内容超出了您的控制...假设您正在处理内容管理系统或内容管理系统的主题,您可以在其中控制一些基本结构并需要一些 javascript,但您不对页面中的其他所有内容负责。

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

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

4

9 回答 9

164

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

使用document.compatMode, 将告诉您您在大多数浏览器中所处的模式。

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

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

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

于 2009-03-09T17:02:44.513 回答
20

由于您可以在 JavaScript 中查询渲染模式,因此您可以拥有一个Bookmarklet,它会告诉您页面正在使用哪种渲染模式。

我发现这个渲染模式小书签很适合我:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');
于 2009-10-30T09:53:05.550 回答
12

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

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

将在 IE 6 和 7 中强制使用 quirks 模式,尽管这并不是真正的错误(当文件的第一行不是声明时,它们只会抛出一个完全不稳定的问题)。可以在此处找到类型/怪癖的快速列表

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

<a href="javascript:alert(document.compatMode);">What mode am I?</a>
于 2009-03-09T17:23:24.493 回答
4

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

希望这可以帮助

于 2009-03-09T17:06:56.997 回答
2

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

于 2009-03-09T17:02:58.707 回答
2

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

我找到的用于确定不同浏览器如何处理每种文档类型的最佳资源在这里

于 2009-03-09T17:23:30.313 回答
2

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

于 2011-07-15T08:14:19.183 回答
2

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

于 2013-08-07T13:39:53.860 回答
0

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

于 2013-03-05T08:09:06.993 回答