2013-07-30 109 views
4

将我的GWT版本升级到2.5.0后,我将鼠标悬停在图表(SVG)上时出现问题。对象不支持此属性或方法

该问题仅出现在IE中(Chrome和Firefox未受影响)。

该消息是

2异常捕获:(类型错误)描述:对象不支持 属性或方法“包含”数:-2146827850:对象不 支持属性或方法“包含“;

该问题似乎是由DOMImplTrident类中称为isOrHasChildImpl的新方法造成的。

我想知道有没有其他人满足周围的工作比不使用IE之外的这个问题或知道;)

感谢

+0

任何特定版本的IE? –

+0

您可以使用DETAILED模式编译并向您的应用程序添加异常处理程序,并打印堆栈跟踪以查看问题来自何处。 –

+0

我正在使用IE版本9.它在版本8中工作。 –

回答

3

这只是一个猜测,但我怀疑你的问题的根源DOMImplTrident.isOrHasChildImpl方法的第53行。

return (parent === child) || parent.contains(child); 

我进一步猜测你在IE10上遇到你的错误?我认为你对IE10运行的原因是因为GWT并没有正式支持IE10和单独的DOM实现。它最终将在IE10上使用DOMImplIE9实现,该实现继而使用DOMImplTrident中的上述方法实现其“isOrHasChild”。我想知道如果线47

if (parent.nodeType == 9) { 

实际上没有返回9文档节点,从而落入“别人的语句为一个文件节点并炸毁当它试图访问“包含”方法。也许IE10没有实现与以前版本的IE相同的那些节点方法?不确定。

我没有IE10方便测试这个理论,但这可能是一个很好的开始。您可以创建您自己的JSNI方法,该方法使类似的节点调用来测试理论,并查看'document.nodeType'是否确实返回9或者'node.contains'是否在各种类型的节点上爆炸。

如果这确实是问题所在。你可以尝试几件事来解决/避免这个问题。

  1. 尝试在您的入口点连接一个GWT.setUncaughtExceptionHandler(),并完全忽略该错误。

  2. 围绕调用问题代码的'your'方法之一的代码块附加try/catch,并忽略异常。

  3. 尝试将以下元标记添加到您的html文件中,并查看在IE10中是否呈现为IE9来解决问题。

    <meta http-equiv="X-UA-Compatible" content="IE=9" /> 
    
  4. 创建一个自定义DOMImpl延伸DOMImplIE9并覆盖“isOrHasChild”法,你必须在发生什么控制自己的自定义方法。例如

    package com.google.gwt.dom.client; 
    
    public class DOMImplIE9Custom extends DOMImplIE9 { 
        @Override 
        public boolean isOrHasChild(Node parent, Node child) { 
         // Do your own thing 
        } 
    } 
    

然后使用延迟绑定像这样与你的自定义实现切换出DOMImplIE9:

即使我大错特错,你没有使用IE10你仍然可以尝试上述想法来解决这个问题。要么这样做,要么做最终修复,并完全停止使用IE,并避免很多小时的压力:)希望能帮助你至少走上正确的轨道。

+0

'GWT.setUncaughtExceptionHandler()'已经发现了异常,看起来好像它会做的伎俩。谢谢。 –

+0

在我的情况下,第三点是IE 11上例外的原因... – cybersoft

相关问题