2012-03-07

Chrome 17.0.963.65のアップデートが停止されたわけ

Chromeのstable release 17.0.963.65が、5日に出ていた。

Chrome Releases: Chrome Stable Update

しかし、なぜかアップデート出来ない。どうしてかと思ったら、深刻なバグがあったかららしい。

Issue 116789 - chromium - Javascript getElementsByClassName result list no longer changes on class changes - An open-source browser project to help move the web forward. - Google Project Hosting

GetElementsByClassNameで返されるNodeListはliveであり、動的に変更される。例えば、クラス名を変更したらNodeListから削除される。なんとも実装が面倒そうな仕様だが、そういう仕様になっているのだから仕方がない。

こういう仕様のもとでNodeListを実装しようとしたら、二度目以降の要求に対しては、あらかじめ内部的に確保しておいた「何か」を渡すような実装になっていてもおかしくない。なぜなら、NodeListは生きているからだ。Chromeはどうもそういう実装なのか、クラス名を動的に変更した後、二度目以降のGetElementsByClassNameで、変更が反映されることがなくなってしまうらしい。そのバグが重複として上がっている。

Issue 116955 - chromium - getElementsByClassName failed to get modified data - An open-source browser project to help move the web forward. - Google Project Hosting

17.0.963.65がこの挙動をぶち壊してしまったので、急遽止めてまで修正していたらしい。いまは、17.0.963.66が出ている。

ちなみに、新しめのAPIであるquerySelectorAllの返すNodeListはliveではない。

Selectors API Level 1

さすがに、こんな仕様には懲りたのだろう。新しいAPIにも従来の変な挙動を持ち込む必要はない。

No comments: