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:
Tweet (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+F4のkeypress
が原則、発生しなくなりますが、ピン止めされたタブで開かれている場合には、発生します。どちらにしろ、このショートカットキーをWebアプリはハンドリングすべきではありませんが。