externalWidth(true) gwtQuery и IE8 не работают без задержки

Недавно я столкнулся со странным поведением при попытке вычислить ширину (с полями) элемента с помощью gwtQuery. Цель состоит в том, чтобы получить ширину (включая отступы, границы и поля) данного элемента как дочернего элемента определенного родителя. Этот родитель может определять определенные правила CSS для некоторых детей, поэтому я клонирую его, добавляю свой элемент к этому родителю, вызываю .outerWidth(true) чтобы получить ширину и, наконец, удалить клона от родителя.

Он отлично работает в Chrome, Firefox и IE 10, но случайно завершается неудачей (выводит 0) в IE 8. Однако я заметил, что если я помещаю "сон" между моментом добавления элемента в DOM и моментом получения внешнего ширина, это всегда удается.

Я явно не хочу спать. Поэтому мой вопрос: есть ли у кого-нибудь понимание того, как обойти это поведение или даже лучший способ достижения той же цели?

Спасибо!

Вот фрагмент кода

private Integer computeTabWidth(IsWidget tab) {
    GQuery $tab = $("<li></li>").append($(tab).clone());

    $(containerPanel).append($tab);

    // IE 8 debug.
    sleep(100);

    Integer tabWidth = $tab.outerWidth(true);
    $tab.remove();

    return tabWidth;
}

private void sleep(int i) {
    long time = new Date().getTime() + i;

    while (time > new Date().getTime());
}

1 ответ

Я думаю, что это проблема перекомпоновки, попробуйте заставить браузер выполнить перекомпоновку перед прочтением, замените ваш режим сна на:

$tab.css("offsetHeight")
Другие вопросы по тегам