2009-10-01 46 views
3

我想問問在正常模式下(當正確定義doctype時),QuirksMode中的Internet Explorer是否具有與IE不同的JavaScript實現。QuirksMode和JavaScript的實現

JavaScript代碼在QuirksMode和正常IE模式下的行爲方式可能不同嗎?

+1

你的意思是Javascript代碼本身還是HTML DOM,這些經常被錯誤地混淆? – AnthonyWJones 2009-10-01 13:17:29

回答

10

Yep

其中最顯着的不同是,在特殊模式,BODY(document.body的)被認爲是根元素,而在標準模式(和它的方式的意思是) - 根元素是HTML( document.documentElement中)。

這例如影響視窗尺寸通常計算的方式;在標準模式下,人們會使用document.documentElement.clientHeight,而在怪癖中 - document.body.clientHeight - 可以獲得視口的高度。

檢測這種行爲很容易 - document.documentElement.clientHeight == 0 - 會告訴我們,documentElement不是根元素,以及該機構應改爲使用。

當然,其它通常的怪異模式差異的和,如分配無單位的CSS值,導致不同的結果。當出現怪異現象時,這些值傳統上被成功分配,而在標準模式下 - 它們被忽略。

+3

可能值得指出的是,這些是文檔對象模型中的差異。無論是在Quirks模式,嚴格模式還是在某些非瀏覽器環境中使用,JavaScript實現都保持相同。 – NickFitz 2009-10-01 18:22:32

+0

@NickFlitz是的,當然。如果怪癖模式影響了核心語言的實現,那將會很奇怪:)(儘管使用IE - 你永遠不會知道......) – kangax 2009-10-01 18:59:53

3

它在Internet Explorer 8時問document.getElementById('foo')何(IIRC)setAttribute和朋友都在那裏固定全標準模式不再獲得<a name="foo">肯定不會。

+0

耶完全忘記了IE8的修復。好決定。 – geowa4 2009-10-01 13:18:21

+3

這是一個DOM差異,而不是JavaScript差異。 – NickFitz 2009-10-01 18:23:05

6

JavaScript不應該有不同的表現;然而,JavaScript操作的DOM對象可能有不同的行爲。