GWT Javascript Exception в размещенном режиме: результат выражения 'doc.getBoxObjectFor' [undefined] не является функцией - PullRequest
3 голосов
/ 19 июня 2009

Кто-нибудь когда-либо видел это исключение? Я работаю в режиме хоста на GWT 1.6.4 на Mac. Я использую AutoSuggest, и он выдает это исключение, пытаясь показать всплывающее окно. Он прекрасно работает в скомпилированном режиме, но, конечно, хост-режим очень важен.

[ERROR] Uncaught exception escaped
com.google.gwt.core.client.JavaScriptException: (TypeError): Result of expression 'doc.getBoxObjectFor' [undefined] is not a function.
 line: 71
 sourceId: 1152617088
 sourceURL: jar:file:/Users/holmes/.m2/repository/com/google/gwt/gwt-user/1.6.4/gwt-user-1.6.4.jar!/com/google/gwt/dom/client/DOMImplMozillaOld.java
 expressionBeginOffset: 288
 expressionCaretOffset: 307
 expressionEndOffset: 313
    at com.google.gwt.dom.client.DOMImplMozillaOld.getAbsoluteLeftImpl(Native Method)
    at com.google.gwt.dom.client.DOMImplMozillaOld.getAbsoluteLeft(DOMImplMozillaOld.java:29)
    at com.google.gwt.dom.client.Element$.getAbsoluteLeft$(Element.java:86)
    at com.google.gwt.user.client.DOM.getAbsoluteLeft(DOM.java:646)
    at com.google.gwt.user.client.ui.UIObject.getAbsoluteLeft(UIObject.java:487)
    at com.google.gwt.user.client.ui.PopupPanel.position(PopupPanel.java:1015)
    at com.google.gwt.user.client.ui.PopupPanel.access$5(PopupPanel.java:958)
    at com.google.gwt.user.client.ui.PopupPanel$1.setPosition(PopupPanel.java:811)
    at com.google.gwt.user.client.ui.PopupPanel.setPopupPositionAndShow(PopupPanel.java:700)
    at com.google.gwt.user.client.ui.PopupPanel.showRelativeTo(PopupPanel.java:809)
    at com.google.gwt.user.client.ui.SuggestBox.showSuggestions(SuggestBox.java:768)
    at com.google.gwt.user.client.ui.SuggestBox.access$3(SuggestBox.java:738)
    at com.google.gwt.user.client.ui.SuggestBox$1.onSuggestionsReady(SuggestBox.java:281)
    at com.google.gwt.user.client.ui.MultiWordSuggestOracle.requestSuggestions(MultiWordSuggestOracle.java:225)
    at com.google.gwt.user.client.ui.SuggestBox.showSuggestions(SuggestBox.java:640)
    at com.google.gwt.user.client.ui.SuggestBox.refreshSuggestions(SuggestBox.java:713)
    at com.google.gwt.user.client.ui.SuggestBox.access$6(SuggestBox.java:705)
    at com.google.gwt.user.client.ui.SuggestBox$1TextBoxEvents.onKeyUp(SuggestBox.java:678)
    at com.google.gwt.event.dom.client.KeyUpEvent.dispatch(KeyUpEvent.java:54)
    at com.google.gwt.event.dom.client.KeyUpEvent.dispatch(KeyUpEvent.java:1)
    at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.fireEvent(HandlerManager.java:65)
    at com.google.gwt.event.shared.HandlerManager$HandlerRegistry.access$1(HandlerManager.java:53)
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:178)
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:52)
    at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116)
    at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:90)
    at com.google.gwt.user.client.ui.TextBoxBase.onBrowserEvent(TextBoxBase.java:193)
    at com.google.gwt.user.client.ui.Composite.onBrowserEvent(Composite.java:54)
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1320)
    at com.google.gwt.user.client.DOM.dispatchEventAndCatch(DOM.java:1299)
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1262)

Ответы [ 4 ]

3 голосов
/ 22 ноября 2009

У меня была похожая проблема при использовании Firefox 3.7a1pre («Minefield») в скомпилированном режиме. Функция getBoxObjectFor была заменена на getBoundingClientRect. Вот мой обходной путь, чтобы заставить GWT работать снова. Просто вызовите следующий метод где-то в начале, по крайней мере, для меня это работает.

private static native void firefox3compatibility() /*-{
 if (!$doc.getBoxObjectFor) {
  $doc.getBoxObjectFor = function (element) {
   var box = element.getBoundingClientRect();
   return { "x"      : box.left,  "y"       : box.top,
            "screenX": box.left,  "screenY" : box.top,
            "width"  : box.width, "height"  : box.height };
  }
 }
}-*/;
0 голосов
/ 13 января 2011

getBoxObjectFor устарело для FF3.6. Вот проблема, которая решает эту проблему в GWT: Issue 4605

0 голосов
/ 12 апреля 2010

Я исправил это успешно, вставив следующую строку после nitobi.browser.detect (); в файле nitobi.toolkit.js. Это около линии 575. (ish)


if(nitobi.browser.MOZ) {
    if(typeof document.getBoxObjectFor == "undefined") {
        document.getBoxObjectFor = function(elem) {
            var obj = new Object;
            var rect = elem.getBoundingClientRect();
            obj.y = rect.top;
            obj.x = rect.left;
            obj.width =Math.abs(rect.right-rect.left);
            obj.height = Math.abs(rect.bottom-rect.top);
            return obj;
        }
    }
}

Хорошо работает, если браузер Gecko, на который вы нацеливаетесь, реализует функцию getBoundingClientRect, как Mozilla.

Они устарели как getBoxObjectFor и вместо этого добавили эту функцию.

Надеюсь, это поможет.

0 голосов
/ 04 февраля 2010

Это отличное исправление, но мне также нужно было добавить screenX и screenY к возвращенному объекту:

private static native void firefox3compatibility() /-{ if (!$doc.getBoxObjectFor) { $doc.getBoxObjectFor = function (element) { var box = element.getBoundingClientRect(); return { "x" : box.left, "y" : box.top, "width" : box.width, "height" : box.height, "screenX": box.left, "screenY":box.top }; } } }-/;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...