JavaScript : 日本語入力時のキーイベント。

PC版へ 2010年11月16日
さてさて、JavaScriptで「日本語入力がON & 変換確定時に何か処理をしたい」と考えました。「日本語の変換が確定した」という情報を得なくてはなりません。キーイベントを受け取ることで、日本語入力中 / 変換確定 の区別は可能なんだろうか。

手元にある、いくつかのブラウザで挙動を調べてみた。

Firefox 3.6.x (Gecko 1.9.2) : Mac OS X , Windows , Linux(Xubuntu)
日本語変換中は、全てのキーで keydown,keypress,keyup,全てのイベントを受け取らない
確定のエンターキーを押したときのキーアップイベントから復活。

Internet Explorer 8
日本語入力中、keydownにはキーコード"229"が、keyupには押したキーのキーコードが返ってくる。キープレスイベントは発生しない。
日本語変換中の
の全てで同様(keydown=229, keyup=押したキーのキーコード)の情報が返ってくる。

Safari 4.x, 5.x (AppleWebKit/533.18.1) : Mac OS X , Windows
IE8と同様。

Google Chrome 7 (AppleWebKit/534.7) : Mac OS X , Windows
IE8と同様。
ただし、多分バグだと思うのですが、日本語変換を確定するときに叩くEnterキーにkeyUpイベントが発生しません

Google Chrome 7 : Linux(Xubuntu)IMEはAnthyを使用
Firefoxと同様。日本語変換中は何も喋らない。

Opera 10.6 : Mac OS X
keydown, keyupには、押したキーのキーコードが返る。keypressは発生しない。
変換候補からの選択時に押すスペースキー、部分確定時のエンターキーでkeydown,keyupが発生する。

…ということで結論は、
となりますな。

冒頭に書いた「日本語入力がON & 変換確定時に何か処理をしたい」という目的からすれば、Firefoxの挙動が理想なのですが、「正しい動作」という点から見たら、その他のブラウザの動きのほうが良いんでしょうなぁ。

テキストエリアに何か入力したときに発生するキーイベントをキャプチャするスクリプトを書いてみたので、ブラウザの挙動を確認してみてください。
  → JavaScript : 日本語入力時に発生するキーイベントのテスト

関連記事

コメント

現在、コメント機能は停止しています。