7cc@はてなブログ

JavaScriptとかとか

Google ChromeのCSSOMは相変わらず間違っている

追記

ver. 33.0.1750.117 m でCSSOMの実装が以前のバージョンに戻った。今は下記のエラーは表示されない

しかしこの実装は間違っているので、将来的には変更があると思われる。

以下は追記以前の情報

body.scrollTopに値がセットできなくなった

こういうエラーが出るようになった。

body.scrollTop is deprecated in strict mode. Please use 'documentElement.scrollTop' if in strict mode and 'body.scrollTop' only if in quirks mode.

しかし、実際にはbodyはスクロールできる。このバグは報告されている。
https://code.google.com/p/chromium/issues/detail?id=312435

document.document.Element.scrollHeight と body.scrollHeight

仕様にのっとると、スクロール最大可能量は
html.scrollHeight - html.clientHeight で求められる。

しかし、WebkitとBlinkでは
body.scrollHeight - html.clientHeight になる。

デモ: http://software.hixie.ch/utilities/js/live-dom-viewer/?saved=2777

対応

このバグはhtml, bodyにサイズの変わるCSSを適用していると起きる。たぶんborder・・・たぶん。それをやめれば解決する。多くのサイトで対応する必要無し。そもそもscrollHeightを使っていないと思う。

何が起きたか

Google Chromehtml.scrollTopが呼ばれたらbody.scrollTopを返すようにしただけで、実際の(内部の)修正はしていないっぽい。相変わらずbodyがviewport scrollingを受け持っている。

追記にも書いたが、今は↑は違う。