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

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

もずはっく日記(2014年6月)

2014年6月10日

Bug-org 1008772 Web sites can steal ctrl+page up/down
初回投稿日時: 2014年06月10日03時26分32秒
最終更新日時: 2014年06月10日03時44分38秒
カテゴリ: Events Firefox Mozilla Core Mozilla32 バグ修正
SNS: (list)

Webアプリが、Ctrl+PageDown等、キーボードによるタブナビゲーションのキーをkeydownイベントで、preventDefault()を呼び出していると、続くkeypressイベントが発生しなくなっているため、一部のサイトではキーボードでタブを操作できなくなっているというバグです。

よくよく調査してみると、そもそも、keypressイベントの.stopPropagation()を呼び出していると、やはり、操作不能になることが分かりましたので、<tabbox>要素や、<tabbrowser>要素のキーイベントのハンドリングがまずいことにすぐに気付きました。

このバグでは、keypressイベントを待たなくてはいけない場合を除き、keydownイベントでハンドリングするように変更することで、Webアプリがタブのナビゲーションは阻害できないように改善しています。また、.stopPropagation()対策として、システムイベントグループにリスナを登録するように変更したので、Webアプリが、通常イベントグループでstopPropagation()を呼び出しても、影響を受けなくなっています。

なお、この修正により、以下のキーイベントは、Firefoxではkeypressイベントが常に発生しなくなりました。これは、keydownイベントのpreventDefault()を呼び出す必要がある、その副作用です。ただし、Gecko以外のブラウザエンジンでは、keypressイベントが、これらの非文字入力キーで発生することがそもそも無いので、Firefoxに特化したWebアプリを作ったりしていない限りは、問題は無いと思います。

  • Ctrl+Tab
  • Ctrl+Shift+Tab
  • Ctrl+PageDown
  • Ctrl+PageUp
  • Ctrl+Shift+PageDown
  • Ctrl+Shift+PageUp
  • Ctrl+ArrowUp (Mac以外)
  • Ctrl+ArrowDown (Mac以外)
  • Ctrl+ArrowLeft (Mac以外)
  • Ctrl+ArrowRight (Mac以外)
  • Ctrl+Home (Mac以外)
  • Ctrl+End (Mac以外)
  • Command+ArrowUp (Mac)
  • Command+ArrowDown (Mac)
  • Command+ArrowLeft (Mac)
  • Command+ArrowRight (Mac)
  • Command+Home (Mac)
  • Command+End (Mac)
  • Command+Option+ArrowLeft (Mac)
  • Command+Option+ArrowRight (Mac)

加えて、Mac以外では、Ctrl+F4keypressが原則、発生しなくなりますが、ピン止めされたタブで開かれている場合には、発生します。どちらにしろ、このショートカットキーをWebアプリはハンドリングすべきではありませんが。

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

bug-org 1008772を含むエントリ