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

让我们假设你有一个相对严格的 doctype 和 HTML 标记的页面,非常接近兼容,但可能在一些愚蠢的方式错过了,也许是因为用户内容不在你的控制范围之内... ... 假设你正在开发一个内容管理系统或一个内容管理系统的主题,在这个系统中,你控制了一些基本的结构,需要一些 javascript,但是你不需要对页面中的其他内容负责。

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

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

54888 次浏览

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

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

Chrome,Safari 和 IE 浏览器中,在地址栏中运行这个 javascript:

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

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

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

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

希望这个能帮上忙

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

<!-- 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>

如果我正确理解了怪癖模式,那么一个没有根据其声明的 doctype 进行验证的页面就不足以触发怪癖模式。只是不能正确显示。

我找到的确定不同浏览器如何处理每种文档类型的最佳资源是 给你

当你可以在 JavaScript 中查询渲染模式时,你可以使用一个 书签来告诉你页面正在使用的渲染模式。

我找到了适合我的 这个渲染模式书签工具:

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

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

在 html5页面,写“ <!DOCTYPE html>”开始页面可以改为 CompatMode = ‘ CSS1Compat’

在 IE 中,你会在开发工具中看到它(按 F12) ,它在菜单中说: 文档模式: ..。 你也可以在那里强制一个不同的模式。