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

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

もずはっく日記(2011年9月)

2011年9月29日

Bug-org 543789 Implement DOM3 composition events
初回投稿日時: 2011年09月29日15時56分38秒
最終更新日時: 2011年09月29日16時04分14秒
カテゴリ: Mozilla9 バグ修正
SNS: (list)

D3EのCompositionイベントの実装が終わりました。一点を除き、仕様通りという点ではGeckoが初の実装になっています(WebKitはcompositionstartdata属性の実装が間違っていて、compositionupdateが最初に発行されません)。

なお、問題のcompositionstartdata属性の値は、compositionstartイベントを発行する時点での選択範囲の値となっていて、リアルタイムの値ではありません。つまり、compositionstartイベントに複数のハンドラがあって、そのうちの一つが選択範囲を変更したとしても、それ以降のハンドラで取得できるdata属性値は、変更前のものです。こうしなければ、受け取ったcompositionstartイベントをグローバル変数等に保存した場合の扱いが難しくなるので、このようになっています。

ちなみに、仕様通りに実装していない一点とは、compositionstartイベントがキャンセル可能ではない、という点です。仕様書にはcompositionstartイベントでpreventDefault()を呼び出すと、IMEの始動をキャンセルできるとありますが、compositionstartイベントはIMEに一度処理を渡して、始動したことが分かった時に発行するものですので、もうキャンセル不能な状況だからです。

また、locale属性は実装はしていますが、Geckoから発行されるイベントでは常に空文字列が返ります。ですが、initCompositionEvent()からは初期化可能で、またその値を取得することはできますので、他のブラウザとの互換性はできるだけ維持しています。将来的には実装すると思いますが、今のところ意義があまり無いと思われるので優先順位は低めです。

textinputイベントの実装の方に、テストケースを用意しているので、ブラウザ間の動作の違いを確認するのに利用してみてください。

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

bug-org 543789を含むエントリ