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

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

もずはっく日記(2015年2月)

2015年2月21日

Bug-org 1126673 Enable KeyboardEvent.code in default settings of release build
初回投稿日時: 2015年02月21日21時07分16秒
最終更新日時: 2015年02月21日21時14分44秒
カテゴリ: Events Mozilla Core Mozilla38 バグ修正
SNS: (list)

Sunキーボードの問題が解決し、特に互換性等で問題になる可能性のある話も今のところ無いので、リリースビルドでもようやく、KeyboardEvent.codeを有効化しました。

重ね重ね警告しておきますが、KeyboardEvent.codeは、キーボード上の物理キーの位置を確認するためのものです。このため、ユーザが本当にPCのキーボードで操作している時にしか区別が付きませんし、WindowsやMacでは、OSがサポートしていないキーに関しては、値が空文字列、もしくはキーイベント自体が発生しない、ということになります。以下に、違いをまとめておきます。

属性値の意味モディファイアキーの状態に依存OSのキーボードレイアウト設定に依存
KeyboardEvent.key ユーザがそのキーを押したことで期待している効果。テキストを入力するキーの場合、 入力される文字がそのまま入っており、それ以外の場合は、キー固有の名前が入る。 するする
KeyboardEvent.code ユーザが押した物理キーのID。ソフトウェアキーボードを含む、 他のアプリから生成されたキーイベントの場合、空文字列のこともある(生成元に依存)。 しない(ただし、ハードウェアレベルのモディファイアキー、Fnキー等は例外)しない
KeyboardEvent.keyCode ユーザが押したキーを示す意味の無い数値。 元々はIEがWindowsの仮想キーコードをそのまま設定していたものなので、 ブラウザによって値の解釈や定義が異なる。特に、非Windows環境での互換性は皆無。 テキスト入力キーでは非依存、それ以外のキーは依存する
KeyboardEvent.charCode ユーザが押したキーで入力される文字のUnicode値(UTF-16?)KeyboardEvent.keyCodeに比べると互換性が高い。 するする

現在、KeyboardEventの実装はGeckoが最も最新仕様に準拠していて、実装している機能も最も多いので、これをリファレンスに研究してもらえれれば良いかと思います(他のブラウザが互換性の高い実装が可能なように、詳細な技術情報はMDNで公開し、W3CのワーキンググループのMicrosoftとGoogleの方々も把握しています)。

KeyboardEvent.keyがほとんどの処理ではユーザの期待する結果を表しています。ただし、これを利用する際には、仕様の変化に簡単に対応できるようにするために、コーディングに一手間かけることをお勧めします

それに対して、KeyboardEvent.codeは、例えばゲームで、WSADのキーを、上下左右の十字キーの変わりとして用いる場合に、ユーザが選択しているキーボードレイアウトに関係無く処理できるのが特徴です。QWERTYでも、AZERTYでも、Dvorakでも、同じキーからは同じ値が取得可能なわけです。キーの位置に意味がある操作の処理にのみ、有用でしょう。

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

bug-org 1126673を含むエントリ