Я разрабатываю веб-сайт, используя фреймворк Seam и библиотеку RichFaces AJAX (на самом деле это не так уж и важно для рассматриваемой проблемы - просто немного предыстории).
Кажется, я обнаружил ошибку в RichFaces, которая в некоторых случаях приведет к сбою обновления на основе AJAX в IE8 (дополнительную информацию см. здесь: http://community.jboss.org/message/585737 ).
Ниже приведен код, в котором возникает исключение. происходит:
var anchor = oldnode.parentNode;
if(!window.opera
&& !A4J.AJAX.isWebkitBreakingAmps()
&& oldnode.outerHTML
&& !oldnode.tagName.match( /(tbody|thead|tfoot|tr|th|td)/i ) ) {
LOG.debug("Replace content of node by outerHTML()");
if (!Sarissa._SARISSA_IS_IE || oldnode.tagName.toLowerCase()!="table") {
try {
oldnode.innerHTML = "";
} catch(e){
LOG.error("Error to clear node content by innerHTML "+e.message);
Sarissa.clearChildNodes(oldnode);
}
}
oldnode.outerHTML = new XMLSerializer().serializeToString(newnode);
}
В последней строке (с XMLSerializer) в IE возникает исключение. Мне было интересно, знает ли кто-нибудь о каком-либо методе / библиотеке / и т.д. замены, который я мог бы использовать там (только в IE в порядке). Спасибо.
РЕДАКТИРОВАТЬ: После некоторых дополнительных исследований выяснилось, что исключение вызвано не тем, что XMLSerializer не определен, а скорее, когда я пытаюсь назначить вывод XMLSerializer свойству externalHTML старого узла .
Это странно, потому что это работает в большинстве случаев, но дает сбой только в паре сценариев (эта часть структуры кажется довольно важной).
Может ли кто-нибудь придумать причину, по которой вывод XMLSerializer (который, судя по тому, что показывает отладчик, выглядит вполне допустимым HTML) не может быть назначен свойству externalHTML элемента ?
Самое странное, что если бы я клонировал элемент (используя cloneNode (true)
), а затем установил внешний HTML, это, похоже, сработало.