Я внедряю решение ConroyP для покадровой замены вместо решения, основанного на настройке document.domain, но оказалось, что довольно сложно правильно определить высоту содержимого iframe в разных браузерах (тестирование с FF11, Ch17 и IE9 прямо сейчас).
ConroyP использует:
var height = document.body.scrollHeight;
Но это работает только при начальной загрузке страницы. Мой iframe имеет динамическое содержимое, и мне нужно изменить размер iframe для определенных событий.
В итоге я использовал разные свойства JS для разных браузеров.
function getDim () {
var body = document.body,
html = document.documentElement;
var bc = body.clientHeight;
var bo = body.offsetHeight;
var bs = body.scrollHeight;
var hc = html.clientHeight;
var ho = html.offsetHeight;
var hs = html.scrollHeight;
var h = Math.max(bc, bo, bs, hc, hs, ho);
var bd = getBrowserData();
// Select height property to use depending on browser
if (bd.isGecko) {
// FF 11
h = hc;
} else if (bd.isChrome) {
// CH 17
h = hc;
} else if (bd.isIE) {
// IE 9
h = bs;
}
return h;
}
getBrowserData () - это функция обнаружения браузером, «вдохновленная» Ext Core http://docs.sencha.com/core/source/Ext.html#method-Ext-apply
Это хорошо работало для FF и IE, но затем возникли проблемы с Chrome. Одной из них была проблема синхронизации, очевидно, что Chrome требуется некоторое время, чтобы установить / определить высоту фрейма. Кроме того, Chrome также никогда не возвращает правильную высоту содержимого в iframe, если iframe был выше содержимого. Это не будет работать с динамическим содержимым при уменьшении высоты.
Чтобы решить эту проблему, я всегда устанавливаю значение iframe на низкую высоту, прежде чем определять высоту содержимого, а затем устанавливаю высоту iframe на правильное значение.
function resize () {
// Reset the iframes height to a low value.
// Otherwise Chrome won't detect the content height of the iframe.
setIframeHeight(150);
// Delay getting the dimensions because Chrome needs
// a few moments to get the correct height.
setTimeout("getDimAndResize()", 100);
}
Код не оптимизирован, это из моего тестирования на уровне:)
Надеюсь, кто-нибудь найдет это полезным!