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

问题描述 投票:127回答:9

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

您如何知道(或:将由什么决定)浏览器何时决定进入“怪癖”模式,而不是使用更具标准兼容性的引擎?

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

html browser quirks-mode
9个回答
156
投票

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

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

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

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

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

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

我发现this render mode 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中强制执行怪癖模式(当文件的第一行不是声明时,它们只会抛出完全的摆动)。类型/怪癖的快速列表可以在here

中找到

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

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

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

希望这会有所帮助

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

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

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

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

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

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


19
投票

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


11
投票

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

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

4
投票

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

希望这会有所帮助


3
投票

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


2
投票

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

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


2
投票

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


2
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.