TinyMCE を IE で動かす
こんにちは。夏休みをいただいて実家に帰っていた tanaka です。今日はちょっとしたエラー回避の話です。ブラウザで動くWYSIWYGエディタのTinyMCEについてです。
TinyMCE を IE で動かすと頻繁にエラーになります…
WYSIWYGエディタのTinyMCEとFCKEditorを試してみたところ、少し使っただけですが、TinyMCEの方が動作が軽快のように感じました。そこでボタンをカスタマイズして挙動を調べていたところ、IE7, IE6で頻繁にエラーが発生して処理が中断されてしまいました。そのときのコードは以下のようなものです。
<script>
//<![CDATA[
function tinymce_init() {
tinyMCE.init({
mode: "textareas",
theme : "basic",
language : "ja",
});
}
window.onload = tinymce_init;
//]]>
</script>
Companion.JSを使って調べたところ、div#id="__ie_onload"な要素が定義されるまえに
TinyMCE.init(...)を呼び出すとエラーになってしまうようです。そこで定義されるまで待つように、呼び出し側で修正しました。
とりあえずの対処
<script>
//<![CDATA[
function tinymce_init() {
var id = window.setInterval(function(){
if (tinymce.isIE && !document.getElementById("__ie_onload")) {
return;
}
window.clearInterval(id);
tinyMCE.init({
mode: "textareas",
theme : "basic",
language : "ja"
});
}, 50);
}
window.onload = tinymce_init;
//]]>
</script>
この修正でエラーが出なくなりました…が、シンプルに呼び出して使えるものがわかりにくくなってしまいました。
根本的な解決策を探してみた
日を改めて、今日検索してみたところ、解決策らしき投稿がフォーラムにあるのを見つけました。
ちゃんと理解できたわけではありませんが、DOM.get関数で取得済みだからthisで参照すればいいんじゃない?というような内容だったので、試してみました。結果は……やっぱりエラーが出てしまいました。
まとめ
TinyMCEをIEで動作させたときにエラーが出ないようにしました。でも、きれいな解決策とはいえなさそうです。解決法などご存知の方がいれば教えてください。
トラブルもありましたけど、TinyMCEはなかなか軽量で使えるWYSIWYGエディタだと思います。
修正 2008/11/10
コメントでご指摘いただいた点について、本文中のサンプルコードにエラーが含まれていましたので訂正いたします。