我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)
最后一行(使用XMLSerializer的那一行)是IE中发生异常的地方.我想知道是否有人知道我可以在那里使用的任何替换方法/库/等(仅在IE上很好).谢谢.
编辑:经过一些进一步的研究后,似乎异常不是由XMLSerializer未定义引起的,而是当我尝试将XMLSerializer的输出分配给oldnode的outerHTML属性时.
这很奇怪,因为它大部分时间都有效,但仅在几个场景中失败(这个框架似乎相当重要).
任何人都可以想到什么时候XMLSerializer的输出(从调试器显示的内容看起来是非常有效的HTML)对于元素的outerHTML属性是不可分配的?
最奇怪的是,如果我要克隆元素(使用cloneNode(true))然后设置outerHTML,它似乎工作.