■現象
日記作成・編集画面で、以下の手順でブラウザが固まります。
- 後述のHTMLファイルをブラウザで表示し、全文コピーしておく。
- 日記作成を開き、本文領域をプレビューモードにする。
- 上でコピーしておいた内容を、ペーストする。
- テキストモードにする。
以下に、問題の発生するHTML例を貼付します。
<html><body>
問題は<font size="2">size=2などのfontタグ</font>でおきます。
</body></html>
実際には、プレビューモードからテキストモードへの切替時、editor_plugin.js.src内のconvertHtmlTagToDecoTag処理で、特定のfontタグを処理しようとした際に無限ループが発生するようです。
同処理で、fontタグがcolor属性を持っている際はop:colorタグに、size属性で5が指定されている時はop:largeタグに、1が指定されている時はop:smallタグに変換されます。これ以外のfontタグがあった場合、この処理では属性を持たないfontタグに変換されてしまいます。ここでfontタグ(旧)がfontタグ(新)に変換され、fontタグ(新)がまた変換対象になる、ということを繰り返し、無限ループが発生しています。
対応するop:*タグがないfontタグは、削除されるのが妥当ではないかと思われます。私達の環境では先の修正をし、問題を解消できました。あまり起こるケースではなさそうですが、私達のユーザーからすでに指摘を受けており、実際にユーザーが何度も起こしてしまっているようです。ブラウザが固まると弊害も大きく、修正をお願いします。
OpenPNE 2.12.5に対するパッチを添付します。
■原因
プレビューモードからテキストモードへの切替時、editor_plugin.js.src内のconvertHtmlTagToDecoTag処理で、特定のfontタグを処理しようとした際に無限ループが発生する
■修正内容
public_html/js/tiny_mce/plugins/openpne/内の
editor_plugin.js.srcとeditor_plugin.jsを修正
修正したことで
「問題はsize=2などのfontタグでおきます。」のような文章を
- 日記作成を開き、本文領域をプレビューモードにする。
- テキストモードにする。
を行ってもブラウザが固まらないようになりました。
■関連情報