2013-07-30 3 views
4

После обновления моей версии GWT до версии 2.5.0 у меня возникает проблема при наведении курсора на график (SVG).Объект не поддерживает это свойство или метод

Проблема появляется только в IE (Chrome и Firefox не затронуты).

Сообщение является

2 исключения пойманы: (TypeError) Описание: Объект не поддерживает свойство или метод «содержит» номер: -2146827850: объект не поддержка свойство или метод «содержит «;

Проблема, кажется, вызван новым методом в DOMImplTrident классе под названием isOrHasChildImpl.

Мне интересно, кто-нибудь еще встретить этот вопрос или знаете работы вокруг, кроме не использовать IE;)

Благодарности

+0

Любая конкретная версия IE? –

+0

Вы можете скомпилировать с режимом DETAILED и добавить обработчик исключений в ваше приложение и распечатать stacktrace, чтобы узнать, откуда эта проблема. –

+0

Я использую IE версии 9. Он работает в версии 8. –

ответ

3

Это только предположение, но я подозреваю, что ваша проблема исходит от строка 53 метода DOMImplTrident.isOrHasChildImpl.

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

Я также предполагаю, что вы столкнулись с вашими ошибками в IE10? Причина, по которой я думаю, что вы работаете против IE10, заключается в том, что GWT официально не поддерживает IE10 с отдельной реализацией DOM. В итоге он будет использовать реализацию DOMImplIE9 в IE10, которая, в свою очередь, использует вышеуказанный метод из DOMImplTrident для реализации 'isOrHasChild'. Мне интересно, если строка 47

if (parent.nodeType == 9) { 

не на самом деле возвращение 9 для узла документа и тем самым снижаются в «другое» заявление для узла документа и взрывать, когда он пытается получить доступ к «содержит» метод. Возможно, IE10 не реализует эти методы узлов так же, как предыдущие версии IE? Не уверен.

У меня нет IE10 для проверки этой теории, но это может быть хорошим местом для начала. Вы можете создать свой собственный метод JSNI, который делает подобные вызовы узлов проверять теорию и видеть, действительно ли document.nodeType возвращает 9 или если «node.contains» взрывается на разных типах узлов.

Если это действительно проблема. Вы можете попробовать несколько вещей, чтобы исправить/избежать проблемы.

  1. Постарайся подключения к GWT.setUncaughtExceptionHandler() в точке входа и просто игнорировать ошибку в целом.

  2. Вставьте попытку/поймать блок кода в одном из ваших методов, который вызывает код проблемы и игнорирует исключение.

  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

Смежные вопросы