2

Safari 3.0.x 不支持 document.compatMode 属性来检测文档是以标准模式还是以怪异模式呈现。Safari 3.1 和更新版本确实支持它。如果 document.compatMode 不可用,如何在 Safari 3.0.x 中检测文档模式?

4

2 回答 2

3

快速谷歌搜索结果:“如何确定文档的兼容模式”

基本上,您创建了div一个无效的 CSS 样式,该样式只能在 quirks 模式下工作。然后,您检查 newdiv的样式以查看 css 是否被接受。如果它被接受,则文档处于怪癖模式。

解释代码

var el = document.createElement('div');
el.style.cssText = 'position:absolute;width:0;height:0;width:1';
var compatMode = el.style.width === '1px' ? 'BackCompat' : 'CSS1Compat';

我会为你测试这个,但我无法运行 Safari。如果可以,请对其进行测试并在评论中报告结果。

于 2009-10-16T06:34:15.063 回答
2

大多数较新的浏览器都有,compatMode但有些较旧的浏览器没有。此类浏览器包括 Mac IE 和较旧的 WebKit,例如桌面上的 Safari 2 和许多诺基亚手机。

如果document.compatMode存在,则检查该值是否不存在"BackCompat"。如果是这种情况,则文档处于标准模式。这对 IE 来说是一个早期的结果。

否则,没有document.compatMode,因此它是可能支持标准模式渲染的旧浏览器,但没有compatMode属性。

如果将元素设置为具有数字值以width设置其宽度,则文档不在标准模式下。

if - else如果您觉得它更具可读性,您可以使用它;或者,或者,使用三元赋值。

/* 2010-06-26 Garrett Smith - BSD 许可证 */
功能 isQuirksMode(doc) {
  文档 = 文档 || 文档;
  var compatMode = doc.compatMode,
      测试风格,
      IS_STANDARDS_MODE = 兼容模式?compatMode != "BackCompat" :
      doc.createElement && ((testStyle = doc.createElement("p").style).width = "1",
       !testStyle.width);
  返回!IS_STANDARDS_MODE;
}

这解决了可能存在于世界各国移动设备(如诺基亚)中的旧 Webkit 版本。

它将在 IE5.5 及以下版本中返回 true。在任何具有损坏的 createElement 的浏览器上,存在推理检查createElement都将失败(我相信是 Opera 5)。

避免使用此函数进行一般性推论;总是尽量做到具体。

于 2010-06-27T07:03:28.030 回答