QuirksMode と JavaScript の実装
-
19-09-2019 - |
質問
QuirksMode の Internet Explorer には、通常モード (doctype が正しく定義されている場合) の IE とは異なる JavaScript 実装があるかどうかを尋ねたいと思います。
JavaScript コードが QuirksMode と通常の IE モードで異なる動作をする可能性はありますか?
解決
はい.
最も顕著な違いの 1 つは、quirks モードでは BODY (document.body) が ルート要素, 一方、標準モード (およびその仕様どおり) では、ルート要素は HTML (document.documentElement) です。
これは、たとえば、次のような方法に影響します。 ビューポートの寸法 通常は計算されます。標準モードでは、次のように使用します document.documentElement.clientHeight
, 、奇行の中で - document.body.clientHeight
- ビューポートの高さを取得します。
この動作を検出するのは簡単です - document.documentElement.clientHeight == 0
- それは私たちに言うでしょう documentElement
は ルート要素ではありません, 、その本体を代わりに使用する必要があります。
そしてもちろん、その他の通常の癖モードの不一致もあります。 単位のない CSS 値を割り当てる, 、異なる結果になります。quirks では、そのような値は伝統的に正常に割り当てられますが、標準モードでは無視されます。
他のヒント
JavaScriptは異なる挙動を示すべきではありません。しかし、DOMはJavaScriptが異なる動作を持っていることに動作することをオブジェクトます。
これは確かに<a name="foo">
、どこで(IIRC)document.getElementById('foo')
や友人が固定されているを尋ねられたとき、完全な標準モードはもはやsetAttribute
を取得し、Internet Explorer 8で行います。