Я занимаюсь разработкой веб-сайта с использованием инфраструктуры 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. Мне было интересно, знает ли кто-нибудь о методе замещения/библиотеке/etc, который я мог бы использовать там (только для IE в порядке). Спасибо.
EDIT: после некоторых дальнейших исследований кажется, что исключение не вызвано тем, что XMLSerializer не определяется, скорее это происходит, когда я пытаюсь назначить вывод XMLSerializer свойству outerHTML для старого.
Это странно, потому что он работает чаще всего, но не работает только в нескольких сценариях (этот фрагмент структуры кажется довольно важным).
Может ли кто-нибудь подумать о какой-либо причине, когда вывод XMLSerializer (который, из того, что показывает отладчик, выглядит вполне допустимым HTML), не привязан к свойству outerHTML элемента?
Самое странное, если я должен клонировать элемент (используя cloneNode(true)
), а затем установить outerHTML, он работает.