背景 ブラウザ上で動くリッチテキストエディタを作りたい。 時にはtext以外の要素も使いたいので、独自のDOM操作をしたい。そうなると、入力領域はtextareaではなく、contentEditableを設定したdiv等にしたい。このとき、殆どのブラウザではexecCommandでundoとredoができる。しかし、一度でもJavascriptからDOM操作すると、execCommandによるundo/redoは上手く動かなくなる。結局は独自のUndo/Redo機構を作りたくなる。 この際の鬼門がIME入力の検知。ブラウザごとの数々のバグを、試行錯誤して乗り越えたので、情報共有として公開します。間違いもいっぱいあると思いますが、ご容赦ください。ご指摘も大歓迎。 ※この記事は公開しないつもりでしたが、2020年1月にEdgeが生まれということで、一番の鬼門だったEdgeの情報を残したくなり、