2013-07-30 108 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

相關問題