HTMLDocumentのcreatRangeとXMLDocumentのcreateRange
ちょいとハマったのでメモ。
var str = "<p>hoge<br>hoge</p>"; var range = document.createRange(); var fragment = range.createContextualFragment(str);
通常のHTML内のJavaScriptなら上手くいくが、XML内のJavaScriptだと、パースエラーが起こる。<br>
がパース出来ないからだ。
Firefoxのchrome特権下のJavaScriptでXMLHttpRequestのresponseTextで得たHTMLテキストをパースしようとしてハマったのだ。仕方なく、
var range = window.content.document.createRange();
とブラウザ内のHTMLDocumentを使用してRangeオブジェクトを生成することで解決した。
考えてみれば、RangeオブジェクトのcreateContextualFragmentがHTMLDocumentから生成されたかXMLDocumentから生成されたかで挙動が違うのはまぁ当然だわなぁ。