Bug 6800 stopPropagation()でonmousedownイベントを停止するとマウスドラッグによるスクロールが不可能になる
初回投稿日時: 2011年11月26日10時17分08秒
カテゴリ: Mozilla Core Mozilla11 バグ修正
SNS:
Tweet (list)
コンテンツがmousedown
イベントの、(preventDefault()
ではなく)stopPropagation()
を呼んだときにブラウザのデフォルトアクションであるスクロールバーの操作が妨害されるのはおかしい、というバグです。
Geckoは内部で、二つのイベントループを行っています。最初にイベントが発行されるのが、Webコンテンツが受け取れる、通常グループ、その後で発行されるのがシステムグループ。defaultPrevented
の値はシステムグループに受け継がれますが、stopPropagation()
でイベントをWebコンテンツが止めてしまっても、システムグループでは再びstopPropagation()
が呼び出されるまで発行される仕組みになっています。
スクロールバーのサムのドラッグのためのマウスイベントのハンドリングは通常グループの方にリスナを登録していたため、このような問題が発生してしまっていました。調査したところ、他にもいくつか似た内容のバグを発見しているため、これらの修正を容易にするためにnsIDOMEventTarget::addSystemEventGroup()
を新設していたので修正に時間がかかってしまいました。この新しいメソッドはaddEventListener()
と全く同じパラメータ、挙動をとりますが、バイナリを持った拡張では利用することができますが、scriptableではありません。