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


128

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

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

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

Answers:


159

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

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

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

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

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


当迫使旧页面进入“ EDGE”模式时,我在IE中遇到了另一个潜在价值。值是“ BackCompat”
格雷格·伍兹,

将DOCTYPE设置为完全无效时,我在Chrome中也得到了BackCompat。根据此答案中的代码,如果值不是CSS1Compat,则处于怪异模式。是真的吗 所有可能的值是多少?
still_dreaming_1 '16

显然BackCompatible是“怪癖” /“兼容性”模式的标准值。只有2个值:developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1 '16

19

正如您可以在JavaScript中查询呈现方式一样,您可以拥有一个Bookmarklet,该书签将告诉您页面正在使用哪种呈现方式。

我发现此渲染模式书签非常适合我:

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

11

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

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

即使不是真正的错误,也将在IE 6和7中强制使用怪癖模式(当文件的第一行不是声明时,它们只会抛出一个完全抖动)。在这里可以找到类型/怪癖的快速列表

尝试在您的HTML中粘贴以下行进行测试(我在这里传递的JavaScript行为非常糟糕-很抱歉,请确保此操作永远不会生效:)

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

感谢您的JavaScript测试人员,因为我的前两次尝试都无法逃脱怪癖模式。
Noumenon

css1compat!=怪癖模式?
Mike Cole


3

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


2

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

我已经找到了确定不同的浏览器如何对其进行处理的文档类型的最佳资源是这里


2

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


2

在IE中,您会在开发人员工具中看到它(按F12键),并在菜单中显示它:Document Mode:...并且您也可以在那里强制使用其他模式。


这错过了问题的重点。这无助于您编写在怪异模式下执行一条路径而在标准模式下执行另一条路径的javascript。
Joel Coehoorn

实际上,您并不是在问如何使用Javascript来执行操作,而是要知道如何使用浏览器。无论如何,即使您不是故意的,它也可能会帮助其他人寻找它,我本人需要知道如何在Firefox中知道它,并回答了这个问题。
罗南·费辛格

@JoelCoehoorn实际的问题是您从未解释过“相对严格的doctype”是什么!
李斯特先生,2013年

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.