Менее сложный ответ - использовать .contents()
, чтобы попасть в iframe. Интересно, однако, что он возвращает значение, отличное от того, что я получаю, используя код в моем исходном ответе, из-за заполнения тела, я считаю.
$('iframe').contents().height() + 'is the height'
Вот как я это сделал для междоменной связи, поэтому, боюсь, это может быть излишне сложно. Во-первых, я бы поместил jQuery в документ iFrame; это потребует больше памяти, но не должно увеличивать время загрузки, так как скрипт нужно загружать только один раз.
Используйте jQuery iFrame, чтобы измерить высоту тела вашего iframe как можно раньше (onDOMReady), а затем установите хэш URL-адреса на эту высоту. А в родительском документе добавьте событие onload
к тегу iFrame, который будет смотреть на местоположение iframe и извлекать нужное вам значение. Поскольку onDOMReady всегда будет происходить до события загрузки документа, вы можете быть уверены, что значение будет правильно передано без усложнения условий гонки.
Другими словами:
... в Help.php:
var getDocumentHeight = function() {
if (location.hash === '') { // EDIT: this should prevent the retriggering of onDOMReady
location.hash = $('body').height();
// at this point the document address will be something like help.php#1552
}
};
$(getDocumentHeight);
... и в родительском документе:
var getIFrameHeight = function() {
var iFrame = $('iframe')[0]; // this will return the DOM element
var strHash = iFrame.contentDocument.location.hash;
alert(strHash); // will return something like '#1552'
};
$('iframe').bind('load', getIFrameHeight );