我想问一下 QuirksMode 中的 Internet Explorer 是否具有与正常模式下的 IE 不同的 JavaScript 实现(当正确定义了 doctype 时)。
JavaScript 代码在 QuirksMode 和普通 IE 模式下的行为是否可能不同?
我想问一下 QuirksMode 中的 Internet Explorer 是否具有与正常模式下的 IE 不同的 JavaScript 实现(当正确定义了 doctype 时)。
JavaScript 代码在 QuirksMode 和普通 IE 模式下的行为是否可能不同?
是的。
最明显的区别之一是在 quirks 模式下,BODY (document.body) 被认为是根元素,而在标准模式下(以及它的本意) - 根元素是 HTML (document.documentElement)。
例如,这会影响通常计算视口尺寸的方式;在标准模式下,人们会使用document.documentElement.clientHeight
, 而在怪癖中document.body.clientHeight
- 来获取视口的高度。
检测这种行为很容易——document.documentElement.clientHeight == 0
会告诉我们这documentElement
不是根元素,而应该使用那个主体。
当然,其他常见的怪癖模式差异,例如分配无单位 CSS 值,会导致不同的结果。在怪癖中,这些值通常会成功分配,而在标准模式下 - 它们会被忽略。
JavaScript 的行为不应有所不同;但是,JavaScript 操作的 DOM 对象可能具有不同的行为。
<a name="foo">
在 Internet Explorer 8 中确实如此,在询问时不再获取完整标准模式document.getElementById('foo')
,并且 (IIRC)setAttribute
和朋友已修复。