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

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

もずはっく日記(2010年7月)

2010年7月23日

Bug-org 389372 Contenteditable node is still editable without focus
初回投稿日時: 2010年07月23日15時20分04秒
カテゴリ: Mozilla Core バグ修正
SNS: (list)

contenteditableなノードがフォーカスを失っていてもキーボードで文字が入力できてしまう、つまり他の要素でキーボードイベントが正しく処理できない、というバグです。Bug-org 567213でEhsanが多くのケースでこの問題自体は発生しなくなる修正を入れてくれて、あまり目にすることは既に無くなっていましたが、当初の予定通り、本対応のパッチを入れました。

このパッチにより、nsEditorEventListenerがエディタにイベントを通知する前に、そのエディタが処理するべき状況かどうかを確認するようになりました。その条件は、そのエディタがそのDOM window上でフォーカスを持っている、つまり、document.activeElementで、エディタに関連する要素が返される状態でのみ文字入力を受け付けるようになりました。

この処理により、以下のようなコードは動作しなくなっていることに注意してください。

var editor = document.getElementById("editor");
var anotherElement = document.getElementById("anotherElement");
anotherElement.focus();
var keyEvent = document.createEvent("KeyEvents");
keyEvent.initKeyEvent("keypress", true, true, null, false, false,
                      false, false, 0, "A".charCodeAt(0));
editor.dispatchEvent(keyEvent);

今まではこのコードで、editorに"A"が入力されていましたが、今後は無視されるようになります。この挙動は(イベントの違いはありますが)WebKitと同じ挙動です(もっとも、こんな回りくどいことをテスト以外でやることは無いと思いますが)。

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

bug-org 389372を含むエントリ