エントリー

TinyMCE+ThickBoxでファイル挿入

ThickBoxで作ったiframe内部から、TinyMCEの本文へデータを挿入する仕組みでハマったのでメモ。iframe内で色々操作すると、IEではTinyMCEのカーソル位置がリセットされてしまうことがあります。つまり、意図した位置にデータが挿入されないことがあります。

IEの場合はどうにもならないのかなぁ…と思ったけど、WordPressにあるファイル挿入機能ではカーソル位置を正しく記憶しているので、WordPressではどうやって処理しているのかコードを調べてみた。

大量のコードから該当箇所を突き止めるのに時間がかかったけど、どうやらIEの場合のみ、カーソル位置を別途保持しておく必要があるみたい。

↓ThickBoxオープン時にカーソル位置を記憶。

$(document).ready(function() {
  $('a.thickbox').click(function() {
    if (tinymce.isIE) {
      tinyMCE.get('tiny_mce').focus();
      tinyMCE.activeEditor.windowManager.bookmark = tinyMCE.activeEditor.selection.getBookmark();
    }
  });
});

↓データ挿入時にカーソル位置を復元。

$(document).ready(function() {
  $('a.insert').click(function() {
    if (parent.tinymce.isIE) {
      parent.tinyMCE.activeEditor.focus();
      parent.tinyMCE.activeEditor.selection.moveToBookmark(parent.tinymce.EditorManager.activeEditor.windowManager.bookmark);
    }
    parent.tinyMCE.activeEditor.execCommand('mceInsertContent', false, '挿入したいデータ');
    parent.tb_remove();
  });
});

a.thickboxa.insert という値は一例なので、実際のアプリケーションに合わせて適当に変更します。

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed