この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、
断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。
Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではない ことに注意してください。
現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。
順次、修正していく予定ですのでしばらくお待ちください。
もずはっく日記(2011年9月)
2011年9月29日
長らく更新していませんでしたが、今月の修正分です。
nsILookAndFeel
を削除しました。バイナリコンポーネントを利用した拡張ならアクセスできるAPIでしたが、バイナリコンポーネントならネイティブAPIがそのまま使えるので特に問題無いと思います。
XPCOMコンポーネントとしての役割を削除した代わりに、mozilla::LookAndFeel::GetInt()
、mozilla::LookAndFeel::GetFloat()
や、mozilla::LookAndFeel::GetColor()
でGecko内からはアクセスできるようになっています(詳細 )ので、prefsの時と同様、ハッシュテーブルへアクセスしてインスタンスを取得する手間とコストが削減されています。
D3E のCompositionイベント の実装が終わりました。一点を除き、仕様通りという点ではGeckoが初の実装になっています(WebKitはcompositionstart
のdata
属性の実装が間違っていて、compositionupdate
が最初に発行されません)。
なお、問題のcompositionstart
のdata
属性の値は、compositionstart
イベントを発行する時点での選択範囲の値となっていて、リアルタイムの値ではありません。つまり、compositionstart
イベントに複数のハンドラがあって、そのうちの一つが選択範囲を変更したとしても、それ以降のハンドラで取得できるdata
属性値は、変更前のものです。こうしなければ、受け取ったcompositionstart
イベントをグローバル変数等に保存した場合の扱いが難しくなるので、このようになっています。
ちなみに、仕様通りに実装していない一点とは、compositionstart
イベントがキャンセル可能ではない、という点です。仕様書にはcompositionstart
イベントでpreventDefault()
を呼び出すと、IMEの始動をキャンセルできるとありますが、compositionstart
イベントはIMEに一度処理を渡して、始動したことが分かった時に発行するものですので、もうキャンセル不能な状況だからです。
また、locale
属性は実装はしていますが、Geckoから発行されるイベントでは常に空文字列が返ります。ですが、initCompositionEvent()
からは初期化可能で、またその値を取得することはできますので、他のブラウザとの互換性はできるだけ維持しています。将来的には実装すると思いますが、今のところ意義があまり無いと思われるので優先順位は低めです。
textinput
イベントの実装の方に、テストケース を用意しているので、ブラウザ間の動作の違いを確認するのに利用してみてください。
私の修正ではありませんが、D3E 関連の修正です。mouseenter
イベント と、mouseleave
イベント も実装されました。
mouseover
やmouseout
との違いは仕様書で確認してもらうとして、mouseenter
とmouseleave
は、そのDOMツリー構造を検査しないといけない分、低速です 。Geckoでは一度、addEventListener()
でこれらのイベントリスナをインストールするか、属性値を利用した場合に、そのドキュメント内では常に発行されるようになりますので、mouseover
や、mouseout
で代用できる処理であれば、mouseenter
とmouseleave
を使わない方が端末への負荷を減らすことができます。つまり、拡張機能を含む、chromeのコードではこれらのイベントを使うべきではありません。特に、FirefoxやThunderbird等のchromeで利用した場合、デバッグビルドでは警告が出力されるようになっていますので、開発者の方は絶対に利用しないようにしてください。
サイドバー
日記内のナビゲーション
Twitter