読者です 読者をやめる 読者になる 読者になる

愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

iPhone, Androidでの日本語入力監視メモ

JavaScript iOS Android

DOM Level3で規定されているComposition Eventを使うと、IMEの入力開始 -> compositionstart, IMEで文字追加,変換 -> compositionupdate, IMEで変換確定 -> compositionend, という風にIMEによる英語以外の文字の入力をイベントとして受け取ることが出来ることになっている。各フェーズにおける入力されている語もevent.dataで取ることが出来る、ことになっている。(少なくともiOS 4.3.5ではちゃんと各フェーズで取れた)

http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevent

手元のHTC evo (Android 2.3.4, WebKit/533.1) で調べると、案の定というかComposition Eventは実装されていなかった。Composition Eventが期待される日本語入力等ではkeydown, keypress, keyupも発生しないので、見た感じEventを使って日本語入力をトラッキングする方法はなさそう。


話をいわゆるサジェスト(Googleとかで検索語句の候補が出てくるやつ)に限ると、そもそもキー入力のたびに候補一覧をGETするためのリクエスト送るとか現実的じゃないので、setInterval等を使って定期的に監視を行い、前の値と比較して差分があればリクエスト送る、みたいな形にするのが普通だと思う。例えばGoogleのtopにiPhone, Androidでアクセスして検索窓に文字を打ち込んだ時のサジェストも、おそらくsetInterval等による定期的なチェックだろうと思われる挙動をしている。

別に入力をイベントで取れたとしてもそれ使わないしー、みたいな感じ。なのだろうか。今の所。

AndroidのブラウザでComposition Eventが使えるようになったとしても、定期的な監視 or それをEventと組合せたもの が現実的な解になるのかなー。でも定期的な監視より、Eventで取った方がより快適なサジェストができる可能性はある。負荷とか考えなくてよくて(あるいはサーバ負荷のより少ない方法で実現できて)、かつ理想的なレスポンスで結果セットを返せるなら。