Safari 3.0.x 不支持 document.compatMode 属性来检测文档是以标准模式还是以怪异模式呈现。Safari 3.1 和更新版本确实支持它。如果 document.compatMode 不可用,如何在 Safari 3.0.x 中检测文档模式?
2 回答
快速谷歌搜索结果:“如何确定文档的兼容模式”
基本上,您创建了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。如果可以,请对其进行测试并在评论中报告结果。
大多数较新的浏览器都有,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)。
避免使用此函数进行一般性推论;总是尽量做到具体。