如何确定浏览器是否处于“怪异”模式?

137

假设您有一个具有相对严格doctype和HTML标记的页面,这些标记非常接近符合标准,但可能因为用户内容超出了您的控制而在某些愚蠢的方式上缺失......比如说您正在开发一个内容管理系统或内容管理系统的主题,您可以控制一些基本结构并需要一些JavaScript,但不负责其他所有放置在页面中的内容。

当浏览器决定进入“quirks”模式而不是使用其更符合标准的引擎时,您该如何判断(或:什么会决定)呢?由于IE、Chrome、Safari和Firefox等各大浏览器处理方式各不相同,因此我需要针对每个浏览器都得到答案。单个错误是否足以强制其进入quirks模式,还是您有一些余地?

9个回答

167

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

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

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

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

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


当我将一个旧页面强制进入“EDGE”模式时,我在IE中发现了另一个潜在的值。该值为“BackCompat”。 - Greg Woods
当我将DOCTYPE设置为完全无效的内容时,在Chrome中也会得到BackCompat。根据这个答案中的代码,如果值不是CSS1Compat,则处于怪异模式。这是真的吗?所有可能的值是什么? - still_dreaming_1
显然,“BackCompatible”是“quirks” / “compatibility”模式的标准值。只有这两个值:https://developer.mozilla.org/en-US/docs/Web/API/Document/compatMode - still_dreaming_1
1
现在要访问Firefox的“页面信息”比以前更困难了。现在最简单的方法是按Ctrl+I - krubo

20

由于您可以在JavaScript中查询渲染模式,因此您可以使用书签脚本来查看页面使用的渲染模式。

我发现了这个可用的渲染模式书签脚本,对我很有效:

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

13

对于你实际特定问题“一个错误是否足以强制执行或者你有一些余地?”的完整答案是,这完全取决于错误类型。例如,

<!-- 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不等于quirks模式? - Mike Cole

4

2

对于安装了Web Developer工具栏的Firefox浏览器,您可以查看工具栏右侧的三个图标。最左边的一个告诉您当前所处的模式。


2

在IE浏览器中,您可以打开开发者工具(按F12键),在菜单中找到“文档模式”选项,即可查看当前页面的文档模式。此外,您还可以在该选项中手动切换不同的文档模式。


这样做没有回答问题的关键。那并不能帮助你编写JavaScript代码,在怪异模式和标准模式下分别执行不同的路径。 - Joel Coehoorn
实际上,你并没有问如何在Javascript中执行它,而是如何知道浏览器使用的模式。无论如何,即使你不是有意的,这也可能会帮助其他寻找答案的人,我自己需要知道如何在Firefox中了解它,并找到了这个问题。 - Ronen Festinger
@JoelCoehoorn 实际问题在于您从未解释过“相对严格的文档类型”是什么! - Mr Lister

2

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


2

如果我理解正确的话,一个未通过其声明的文档类型验证的页面并不足以触发怪异模式。它只是不能正确显示。

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


0
在 HTML5 页面中,编写 "<!DOCTYPE html>" 并以页面开头可以更改为 document.compatMode='CSS1Compat'。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接