Одной из самых сложных проблем в моем опыте работы с JavaScript было правильное (то есть "кросс-браузерное") вычисление высоты фрейма .
В моих приложениях у меня много динамически генерируемого iframe, и я хочу, чтобы все они выполняли своего рода автоматическое изменение размера в конце события load, чтобы настроить их высоту и ширину.
В случае высота мои лучшие решения следующие (с помощью jQuery):
function getDocumentHeight(doc) {
var mdoc = doc || document;
if (mdoc.compatMode=='CSS1Compat') {
return mdoc.body.offsetHeight;
}
else {
if ($.browser.msie)
return mdoc.body.scrollHeight;
else
return Math.max($(mdoc).height(), $(mdoc.body).height());
}
}
Я безуспешно искал в интернете. Я также протестировал библиотеку Yahoo, в которой есть некоторые методы для измерений документа и области просмотра, но она не является удовлетворительной.
Мое решение работает прилично, но иногда оно вычисляет более высокую высоту.
Я изучил и протестировал множество свойств относительно высоты документа в Firefox / IE / Safari: documentElement.clientHeight, documentElement.offsetHeight, documentElement.scrollHeight, body.offsetHeight, body.scrollHeight, ...
Также jQuery не имеет согласованного поведения в различных браузерах с вызовами $(document.body).height(), $('html', doc).height(), $(window).height()
Я вызываю вышеуказанную функцию не только в конце события загрузки, но и в случае динамически вставленных элементов DOM или скрытых или показанных элементов. Это случай, который иногда нарушает код, который работает только в событии загрузки.
Есть ли у кого-нибудь реальное кросс-браузерное (по крайней мере, Firefox / IE / Safari) решение? Некоторые советы или подсказки?