このエラーはnewElementと追加する要素が所属するdocumentが一致しないときに発生するエラーです。
- ブラウザの実装によって動作が異なります。
- pc版のブラウザや、android:firefoxですと、appendChildでも動作します。
- android標準ブラウザではエラーが発生してappendできません。(が、停止もしません)
- この現象のエラー確認を行うためにはtry,catch(e)でeをアラートさせるようにします。
対処方法
- 以下のようにinnerHTML , outerHTML を使って要素を追加します。
- 所属するdocumentを変更する根本的な解決方法があるのかもしれませんが、今はこの対策で行います。
var DOM = parseDOM(xhr.responseText);
var h1 = DOM.getElementsByTagName('h1')[0];
try {
fragment.innerHTML = h1.outerHTML;
} catch(e) {
alert(e);
}
テキスト形式をDOMに変換するメソッドの内容は既出ですが以下の通り。
var parseDOM = function(text) {
var htmlDoc;
htmlDoc = document.implementation.createHTMLDocument('dom');
htmlDoc.documentElement.innerHTML = text;
return htmlDoc;
};