IEの改行について

FCKeditorで改行をすると、Firefoxの場合、すなおにbrタグを挿入してくれるのだが、IEの場合、pタグが挿入されてしまう。

これは、IEの編集機能の仕様だ。どういうルールでブロック化するかもはっきりしないし、レイアウト上困ってしまう。

これをFirefoxと同じ挙動にするには、IEが編集モードでもonkeydownイベントを検出できることを利用して、Enterが押されたら強制的にbrタグを挿入してonkeydownイベントをキャンセルする。

ひょっとしてFCKeditorで実装済みか?と思ってソースを検索すると…

fckeditor/editor/_source/internals/fck_1_ie.js

...
function Doc_OnKeyDown()
{
var e = FCK.EditorWindow.event ;
switch ( e.keyCode )
{
case 13 :	// ENTER
if ( FCKConfig.UseBROnCarriageReturn && !(e.ctrlKey || e.altKey || e.shiftKey) )
{
Doc_OnKeyDownUndo() ;
// We must ignore it if we are inside a List.
if ( FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' ) )
return true ;
// Insert the <BR> (The   must be also inserted to make it work)
FCK.InsertHtml( '<br>&nbsp;' ) ;
// Remove the  
var oRange = FCK.EditorDocument.selection.createRange() ;
oRange.moveStart( 'character', -1 ) ;
oRange.select() ;
FCK.EditorDocument.selection.clear() ;
return false ;
}
break ;
case 8 :	// BACKSPACE
// We must delete a control selection by code and cancels the
// keystroke, otherwise IE will execute the browser's "back" button.
if ( FCKSelection.GetType() == 'Control' )
{
FCKSelection.Delete() ;
return false ;
}
break ;
case 9 :	// TAB
if ( FCKConfig.TabSpaces > 0 && !(e.ctrlKey || e.altKey || e.shiftKey) )
{
Doc_OnKeyDownUndo() ;
FCK.InsertHtml( window.FCKTabHTML ) ;
return false ;
}
break ;
case 90 :	// Z
if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
{
FCKUndo.Undo() ;
return false ;
}
break ;
case 89 :	// Y
if ( e.ctrlKey && !(e.altKey || e.shiftKey) )
{
FCKUndo.Redo() ;
return false ;
}
break ;
}
if ( !( e.keyCode >=16 && e.keyCode <= 18 ) )
Doc_OnKeyDownUndo() ;
return true ;
}
...

実装されていました!しかも設定可能になっています。

と、いうことで、IEの迷惑な仕様を回避するには、以下の設定を追加すればよい。

FCKConfig.UseBROnCarriageReturn = true ; // IE only.

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください