Firefox не дает правильную высоту в пределах iframe - PullRequest
2 голосов
/ 16 февраля 2011

Эта ошибка похожа на:

jQuery сообщает о неверной высоте элемента в iframe Firefox

Он возвращает неверный номер.Моя разница в том, что когда моя рамка загружается - она ​​дает ноль.

Я пытаюсь отправить высоту его содержимого в родительское окно.Он продолжает отправлять обратно ноль при загрузке.Если я установлю интервал в 50 мс, я буду видеть увеличение числа до правильного числа.Ноль - ВСЕГДА первое число, данное перед интервалом.

По крайней мере один из элементов внутри имеет предопределенную высоту - некоторые с css, а некоторые с inline.Таким образом, нет причин, по которым он должен возвращать ноль, если элементы все еще загружаются.

Если я console.log $ ('# element'), элемент выглядит скрытым (блеклый в последних версиях).Если я запускаю это в Chrome, он работает отлично.Я также попробовал собственный clientHeight, который также дал 0, поэтому я не думаю, что это jQuery.

РЕДАКТИРОВАТЬ: Элементы добавляются через JS, прежде чем я пытаюсь вычислить высоту.Возможно, проблема в том, что их нет на странице при запуске. Попробуем создать простую демонстрационную страницу для публикации.

ЭТОГО не происходит в бета-версии Firefox 4

Ответы [ 3 ]

3 голосов
/ 16 апреля 2013

Я знаю, что это старый вопрос, но у меня была похожая проблема в Firefox, с iframe, предварительно загруженным в модал Bootstrap, который был обрезан при окончательном отображении. Я не могу рассчитать правильную высоту до тех пор, но я могу сделать это достаточно легко (для конечного пользователя) с небольшим количеством jQuery. Я отвечаю здесь в случае, если другие охотятся за решением похожей проблемы:

$("#myIframe").load(function() {
  $m = $(".modal-body");
  var mh = $m.height();

  var wait = setInterval(function() {
    var ih = $("#myIframe").contents().find("body").height();
    if (ih == mh) {
      clearInterval(wait);
    } else if (ih > 0) {
      clearInterval(wait);
      $m.animate({ height: ih });
    }
  }, 50);

  $(".modal").modal("show");
});

Идея состоит в том, что при загрузке iframe, если браузер вычисляет его высоту, равную 0, я зацикливаюсь до тех пор, пока не изменится заявленная высота, а затем плавно анимирует размер контейнера, чтобы соответствовать.

2 голосов
/ 17 февраля 2011

На момент вычисления iframe равен display: none, потому что я не хотел показывать его, пока все не будет установлено.Так что, хотя это технически другое окно, он все еще думает, что родительский элемент элементов не отображает ничего.

0 голосов
/ 16 февраля 2011

Не видя ваш HTML, jQuery и т. Д., Трудно сказать наверняка.

Я скажу, что мне повезло с использованием offsetHeight, когда возвращаемая высота не кажется точной.Вы пробовали это?

РЕДАКТИРОВАТЬ: Еще одна мысль: я заметил в прошлом, что доступ к IFRAME через JavaScript до полной загрузки содержимого может быть проблематичным.Просто что-то иметь в виду.

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