Bug-org 543789 Implement DOM3 composition events
初回投稿日時: 2011-09-29 15:56:38
最終更新日時: 2011-09-29 16:04:14
カテゴリ: Mozilla9 バグ修正
SNS:
Tweet (list)
D3EのCompositionイベントの実装が終わりました。一点を除き、仕様通りという点ではGeckoが初の実装になっています(WebKitはcompositionstartのdata属性の実装が間違っていて、compositionupdateが最初に発行されません)。
なお、問題のcompositionstartのdata属性の値は、compositionstartイベントを発行する時点での選択範囲の値となっていて、リアルタイムの値ではありません。つまり、compositionstartイベントに複数のハンドラがあって、そのうちの一つが選択範囲を変更したとしても、それ以降のハンドラで取得できるdata属性値は、変更前のものです。こうしなければ、受け取ったcompositionstartイベントをグローバル変数等に保存した場合の扱いが難しくなるので、このようになっています。
ちなみに、仕様通りに実装していない一点とは、compositionstartイベントがキャンセル可能ではない、という点です。仕様書にはcompositionstartイベントでpreventDefault()を呼び出すと、IMEの始動をキャンセルできるとありますが、compositionstartイベントはIMEに一度処理を渡して、始動したことが分かった時に発行するものですので、もうキャンセル不能な状況だからです。
また、locale属性は実装はしていますが、Geckoから発行されるイベントでは常に空文字列が返ります。ですが、initCompositionEvent()からは初期化可能で、またその値を取得することはできますので、他のブラウザとの互換性はできるだけ維持しています。将来的には実装すると思いますが、今のところ意義があまり無いと思われるので優先順位は低めです。
textinputイベントの実装の方に、テストケースを用意しているので、ブラウザ間の動作の違いを確認するのに利用してみてください。