Проблема IE, вероятно, frameborder . Когда вы устанавливаете высоту iframe в IE, она включает несколько пикселей специальной рамки iframe. Рамка рамки не считается нормальной границей CSS и не может быть легко отключена динамически из скрипта.
Вы можете добавить несколько пикселей в IE, чтобы компенсировать рамку, или написать:
<iframe frameborder="0">
чтобы отключить границу (если вы хотите создать реальную рамку вокруг рамки, вы можете добавить новую в CSS).
document.body.scrollHeight может не соответствовать высоте документа в некоторых случаях:
Если тело документа в iframe имеет поле (как тело по умолчанию). Установите для поля и отступа значение 0.
Если вы работаете в режиме Quirks, в этом случае document.body представляет некоторые аспекты области просмотра, которые вы обычно ожидаете увидеть только в document.documentElement. В этом случае установка высоты iframe напрямую устанавливает высоту области просмотра, о которой document.body затем сообщит. Вероятно, именно поэтому iframe не будет уменьшаться в Firefox.
Не используйте Quirks Mode, вы всегда должны использовать Doctype в Standards Mode сегодня. Если вы должны поддерживать страницы в режиме Quirks, вы можете попробовать обернуть всю страницу в div и прочитать значение offsetHeight этого.
Проблема Safari может быть вызвана использованием pixelHeight, который является поддельным расширением IE. В преферансе использовать:
style.height= number+'px';
Это все мерзкий взлом; iframes специально разработаны, чтобы не отвечать на размер документа. Подумайте об использовании элементов на странице, таких как контент, настроенный на стороне сервера, или вместо этого перетаскивайте с помощью AJAX.