emu in blogjava

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  171 随笔 :: 103 文章 :: 1052 评论 :: 2 Trackbacks
Sarissa 在winxp+sp2或者win2003+sp1上面的单元测试是无法全部通过的,在 testCopyChildNodes 和 testMoveChildNodes 两个试例中报错误。

跟踪了一番代码,确定了问题出现在:copyChildNodes 和 moveChildNodes这两个函数的这一行上:

if(ownerDoc.importNode && (!_SARISSA_IS_IE)) {

这个javascript本身是没有错的,错就错在IE。最新版的IE补丁使IE支持Msxml2.DOMDocument.5.0和Msxml2.DOMDocument.4.0,这两个ActiveX虽然没有提供对importNode这个API的支持,但是却内部使用了这个API名字,并且没有很好的包装,导致在判断ownerDoc.importNode 是否存在的时候居然抛了异常。

解决方法之一,是利用逻辑短路原理,调整判断逻辑

if((!_SARISSA_IS_IE) && ownerDoc.importNode ) {

这样在IE上后面一个判断就不会被执行了。

更安全的方法是使用in关键字

if("importNode" in ownerDoc && (!_SARISSA_IS_IE)) {

in关键字不会造成浏览器误会我们要访问importNode这个内部API而抛异常,它只是很忠实的高速我们属性是否存在。

相关的讨论见:

https://sourceforge.net/forum/forum.php?thread_id=1237853&forum_id=256492




posted on 2005-12-09 11:08 emu 阅读(899) 评论(1)  编辑  收藏 所属分类: DHTML和JAVASCRIPT 技术

评论

# re: 修正Sarissa 的一个小错误 2006-05-27 11:00
我的是WinXP+SP2,测试能通过啊。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: