Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > событие по загрузке фрейма


Автор: bars80080 16.2.2012, 11:36
на странице есть фрейм. хочу со страницы апосля загрузки фрейма узнать высоту получившегося окна внутри, чтобы затем расширить высоту фрейма.

один домен на страницу и фрейм.

таким образом, я почему-то даже до загрузки не добрался

Код

var win = document.getElementById('frame').window;
$(win.document).ready(function() { alert('er'); });


или так

Код

$($('#frame').window.document).ready(function() { alert('vb'); });


получилось добраться только через банальное:
Код

<iframe id="frame" src="/some" onload="re_size_frame(this);"></iframe>


но взять высоту внутренностей не получилось. что с помощью jquery, что напрямую

Автор: Leshak 16.2.2012, 12:04
недавно мучился с содержимым iframe

есть такой ход 

height_temp = $("#iframe").contents().find("блок внутри iframe").css('height');

проверить сейчас сам не смогу... 
но помнится доступ такой.
и это не "кросбраузерно" помнится
потому как некоторые закрывают всякий доступ к содержимому  iframe

Автор: bars80080 16.2.2012, 12:08
Цитата(Leshak @  16.2.2012,  12:04 Найти цитируемый пост)
height_temp = $("#iframe").contents().find("блок внутри iframe").css('height');

не, в хроме не работает

Код

height_temp = $("#iframe").contents().find("body").css('height');


сейчас пытаю такое:

Код

function re_size_payment() {

    var _doc = null;
    if(!_doc && document.getElementById('frame').document && document.getElementById('PAYFR').document.body.scrollHeight) {
        _doc = document.getElementById('frame').document.body.scrollHeight;  
    }
    if(!_doc && document.getElementById('frame').contentWindow) {
        _doc = document.getElementById('frame').contentWindow.document.body.scrollHeight;
    }
    alert(_doc);
    _doc += 10;
    
    $('#frame').css('height', _doc + 'px');
}

но в файерфоксе он определяет высоту самого фрейма, а не содержимого

Автор: Leshak 16.2.2012, 12:19
возможно не работает потму что буква лишняя в id


height_temp = $("#frame").contents().find("body").css('height');

Автор: bars80080 16.2.2012, 12:51
нет, я там свой айдишник вообще подставлял

опытным путём вроде как запахал такой код:

Код

function autoIframe(frameId){ 
    try { 
        frame = document.getElementById(frameId);
        innerDoc = (frame.contentDocument) ? frame.contentDocument : frame.contentWindow.document;
        var h = $(frame.contentDocument).height() + 20;
        $('#' + frameId).css('height', h + 'px');
    } 
    catch(err){ 
    } 
}

Код

<iframe id="frame" src="/some" onload="if (window.parent && window.parent.autoIframe) {window.parent.autoIframe('frame');}"></iframe>


код ещё хорош тем, что легко вызывается из любой другой функции. к примеру, те что отрабатывают результат аякс-запросов

проверил в хроме, ФФ, опере и ИЕ8

Автор: ksnk 16.2.2012, 13:57
Код

<button onclick="alert(document.getElementById('xxx').contentWindow.document.body.scrollHeight)">Click</button>
<iframe id="xxx" src="test1/index.html">

Вроде вот такое работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)