Firefox の WYSIWYG モードで execCommand('inserthtml', false, '') が効かないときがあるのに対処する

tracwysiwyg では改行アイコンを実現するために ↓ のようなコードを実行するようにしていました。

function() {
    contentDocument.execCommand('inserthtml', false, '<br>');
}

なのですが、Firefox の場合カーソル位置によっては <br> が入らないことがあります。

WYSIWYG モードが以下のような html を持っているとします。

<p>
first<br>
second<br>
</p>

second と <br> の間にカーソルがあるときに inserthtml で <br> を入れようとしても全く効きません。

結局取った対処は、このカーソル位置でも Shift-Enter による改行挿入は効くようなので、以下のようなコードで Shift-Enter と同等の keyevent を発動させるようにしました。

TracWysiwyg.prototype.insertLineBreak = function() {
    var d = this.contentDocument;
    var event = d.createEvent("KeyboardEvent");
    event.initKeyEvent("keypress", true, true, null, false, false, true, false, 0x000d, 0);
    d.body.dispatchEvent(event);
};