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と同じ挙動です(もっとも、こんな回りくどいことをテスト以外でやることは無いと思いますが)。