FCKeditorと格闘(2)

ATOK発動時にEnterキーの挙動がおかしいの原因は、結局のところ、EnterKeyを処理しているのがやはりkeydownであって、keypress ではなかったことが原因の模様。

というわけで、修正する方法も分かったのだけれど、LGPLなので修正済みコードは同梱しません。

このエントリーだけLGPLにしてしまって(?)、修正方法候補をさらしてみます。


fckeditor/editor/js/fckeditorcode_gecko.js で _FCKKeystrokeHandler_OnKeyDown を検索して以下の2つのイベントハンドラーコードを探す(連結して縮められたJSなので非常に見難い。縮める前のJSを直しても意味がないので注意)。

function _FCKKeystrokeHandler_OnKeyDown(A,B){var C=A.keyCode||A.which;var ...(略)...
function _FCKKeystrokeHandler_OnKeyPress(A,B){if (B._CancelIt){if ...(略)...

名前を変更。

function _FCKKeystrokeHandler_OnKeyDown_original(A,B){var C=A.keyCode||A.which;var ...(略)...
function _FCKKeystrokeHandler_OnKeyPress_original(A,B){if (B._CancelIt){if ...(略)...

修正用のイベントハンドラーコードを直後に追加。OnKeyPress で OnKeyDown を肩代わりする。

function _FCKKeystrokeHandler_OnKeyDown(A,B){
  if(FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac && A.keyCode == 13 ){
    // skipped 
  }
  else{
    _FCKKeystrokeHandler_OnKeyDown_original(A,B)
  }
}


function _FCKKeystrokeHandler_OnKeyPress(A,B){
  if(FCKBrowserInfo.IsGecko && FCKBrowserInfo.IsMac && A.keyCode == 13 ){
    _FCKKeystrokeHandler_OnKeyDown_original(A,B)
  }
  else{
    _FCKKeystrokeHandler_OnKeyPress_original(A,B)
  }
}

影響がどれぐらいか分からないのだけれど、とりあえず自分が使う分には、これで快適になりました。

http://spreadsheets.google.com/pub?key=pfont1YYqi4iF0_IrMP_kTA を見る限りは肩代わりによるfixで良さそうな気はする。
本来なら、ATOKがOnかOffかでKeyPress/KeyDownをちゃんと区別したいんだけれど。

で、これ、開発にFeedbackしておこうと思うんだけれども、これはどちらかというと、Firefoxのバグのような気がしないでもない。どうしたらいいんでしょうかね。