如何判断浏览器是不是处于“怪癖”模式?
Posted
技术标签:
【中文标题】如何判断浏览器是不是处于“怪癖”模式?【英文标题】:How to tell if a browser is in "quirks" mode?如何判断浏览器是否处于“怪癖”模式? 【发布时间】:2010-10-12 05:50:03 【问题描述】:假设您的页面具有相对严格的 doctype 和 html 标记,非常接近合规性,但可能会以一些愚蠢的方式遗漏,可能是因为您无法控制的用户内容...假设您正在工作在内容管理系统或内容管理系统的主题上,您可以控制一些基本结构并需要一些 javascript,但您不对页面中的其他所有内容负责。
当浏览器决定进入“怪癖”模式而不是使用更符合标准的引擎时,您如何判断(或:什么会决定)?
我正在寻找每个主要浏览器的答案,因为 IE、Chrome、Safari 和 Firefox 当然都会以不同的方式处理这些问题。一个错误是否足以强迫它,还是你有一些余地?
【问题讨论】:
【参考方案1】:在 Firefox 和 Opera 中,您可以通过检查页面信息来确定您的浏览器是否处于“怪癖模式”。
使用document.compatMode
,将告诉您您在大多数浏览器中所处的模式。
在 Chrome、Safari 和 IE 中,在地址栏中运行此 javascript:
javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')
(请注意,由于最近的安全更改,您需要在粘贴到地址栏后重新输入javascript:
部分)
【讨论】:
在 IE 中还有另一个潜在价值,我在强制旧页面进入“EDGE”模式时遇到了这种价值。值为“BackCompat” 在将 DOCTYPE 设置为完全无效的内容时,我在 Chrome 中也获得了 BackCompat。根据此答案中的代码,如果该值不是 CSS1Compat,则它处于 quirks 模式。这是真的吗?所有可能的值是多少? 显然 BackCompatible 是“怪癖”/“兼容性”模式的标准值。只有 2 个值:developer.mozilla.org/en-US/docs/Web/API/Document/compatMode 访问 Firefox 的“页面信息”比以前更难了。 easiest way now is Ctrl+I.【参考方案2】:由于您可以在 JavaScript 中查询渲染模式,因此您可以拥有一个 Bookmarklet,它会告诉您页面正在使用哪种渲染模式。
我发现this render mode bookmarklet 对我很有效:
javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');
【讨论】:
【参考方案3】:您的实际具体问题的完整答案是“一个错误是否足以迫使它发生,还是您有一些回旋余地?”是它完全取决于错误。例如,
<!-- 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 模式,尽管这并不是真正的错误(当文件的第一行不是声明时,它们只会抛出一个完全不稳定的问题)。 可以找到类型/怪癖的快速列表here
尝试在您的 HTML 中粘贴以下行进行测试(非常糟糕的 javascript 行为我在这里传递 - 抱歉...确保这永远不会上线 :)
<a href="javascript:alert(document.compatMode);">What mode am I?</a>
【讨论】:
感谢 javascript 测试人员,因为我的前两次尝试逃避怪癖模式都没有成功。 css1compat != 怪癖模式?【参考方案4】:根据http://www.quirksmode.org/css/quirksmode.html : “问题是某些以 quirks 模式编写的页面确实有 doctypes。因此,每个浏览器都有自己的列表,其中包含触发 quirks 模式的 doctypes。有关这些列表的概述,请参阅此浏览器比较图表:http://hsivonen.iki.fi/doctype/”
希望对你有帮助
【讨论】:
【参考方案5】:如果你告诉 IE 它应该是严格的(通过 doctype)它不会在页面中途改变主意。
【讨论】:
【参考方案6】:如果我正确理解了 quirks 模式,那么一个没有根据其声明的 doctype 进行验证的页面不足以触发 quirks 模式。它只是无法正确显示。
我找到的用于确定不同浏览器如何处理每种文档类型的最佳资源是here。
【讨论】:
【参考方案7】:对于添加了 Web Developer Toolbar 的 Firefox,您可以查看工具栏右侧的三个图标。最左边的告诉你你在什么模式。
【讨论】:
【参考方案8】:在 IE 中,您将在开发人员工具中看到它(按 F12),它在菜单中显示:文档模式:... 你也可以在那里强制使用不同的模式。
【讨论】:
这没有抓住问题的关键。这并不能帮助您编写 javascript 来执行怪癖模式的一条路径和标准模式的不同路径。 其实你问的不是Javascript怎么做,而是怎么知道浏览器使用什么模式。无论如何,即使您不是故意的,它也可以帮助其他寻找它的人,我自己需要知道如何在 Firefox 中了解它并解决了这个问题。 @JoelCoehoorn 实际的问题是您从未解释过“相对严格的文档类型”是什么!【参考方案9】:在html5页面中,写“<!DOCTYPE html>
”开头的页面可以改成
document.compatMode='CSS1Compat'
【讨论】:
以上是关于如何判断浏览器是不是处于“怪癖”模式?的主要内容,如果未能解决你的问题,请参考以下文章
如何在浏览器 JavaScript 中检测 OS X 是不是处于暗模式? [复制]
在 Chrome、Firefox 和 Safari 中强制标准/怪癖模式?