この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2011年11月)

2011年11月26日

Bug 6800 stopPropagation()でonmousedownイベントを停止するとマウスドラッグによるスクロールが不可能になる
初回投稿日時: 2011年11月26日10時17分08秒
カテゴリ: Mozilla Core Mozilla11 バグ修正
SNS: (list)

コンテンツがmousedownイベントの、(preventDefault()ではなく)stopPropagation()を呼んだときにブラウザのデフォルトアクションであるスクロールバーの操作が妨害されるのはおかしい、というバグです。

Geckoは内部で、二つのイベントループを行っています。最初にイベントが発行されるのが、Webコンテンツが受け取れる、通常グループ、その後で発行されるのがシステムグループ。defaultPreventedの値はシステムグループに受け継がれますが、stopPropagation()でイベントをWebコンテンツが止めてしまっても、システムグループでは再びstopPropagation()が呼び出されるまで発行される仕組みになっています。

スクロールバーのサムのドラッグのためのマウスイベントのハンドリングは通常グループの方にリスナを登録していたため、このような問題が発生してしまっていました。調査したところ、他にもいくつか似た内容のバグを発見しているため、これらの修正を容易にするためにnsIDOMEventTarget::addSystemEventGroup()を新設していたので修正に時間がかかってしまいました。この新しいメソッドはaddEventListener()と全く同じパラメータ、挙動をとりますが、バイナリを持った拡張では利用することができますが、scriptableではありません。

関連するかもしれないエントリ

bug 6800を含むエントリ