Обновление размера fancybox с содержимым iFrame каждый раз при изменении содержимого

Я использую fancybox 1.3.1. Теперь я загружаю iFrame в Fancybox, который отлично работает. В iFrame пользователь переходит от шага к шагу. На каком-то шаге меняется высота содержимого. Как я могу обновить высоту iFrame?

Я попробовал jQuery postMessage:

<script type="text/javascript" src="fileadmin/templates/lib/jquery.ba-postmessage.min.js"></script>
<script type="text/javascript">
    $("#fancylink").fancybox({
        'type'    :    'iframe',
        'width' : 700,
        'height' : 450,
        'autoScale' : false
    }); 
</script>

<script type="text/javascript">
// set inital height
var if_height = 450;

$(document).ready(function() {
    if($.receiveMessage){
        $.receiveMessage(function(e){  

            // Get the height from the passsed data.
            var h = Number( e.data.replace( /.*if_height=(\d+)(?:&|$)/, '$1' ));
            if ( !isNaN( h ) && h > 0 && h !== if_height ) {
                // Height has changed, update the iframe.
                // checking min and max height
                h=(h<450)?450:h; 
                $("#fancybox-frame").height( if_height = h );
            }
        });
    }
});
</script>

Я получаю два стиля высоты с overflow:hidden; как видно здесь:

<div id="fancybox-inner" style="top: 10px; left: 10px; width: 700px; height: 450px; overflow: hidden;">
<iframe id="fancybox-frame" scrolling="auto" frameborder="0" src="https://www.externaldomain.com#http://www.internaldomain.com/page" hspace="0" name="fancybox-frame1347984635401" style="height: 1180px;">

В результате доступно больше контента, но пользователь не может прокручивать. Так что лучше ничего не делать.

Я также пробовал это с

$('#element').fancybox({
    'onComplete' : function(){
        $.fancybox.resize();
    }
}); 

но здесь ничего не происходит (без изменения размера). Я думаю, что это изменение размера происходит только при первой загрузке fancybox. Но и в первый раз ничего не происходит.

Есть ли решение моей проблемы или я могу использовать только фиксированный размер?

Решение:

Итак, я добавил следующий код, и, похоже, он работает так, как хотелось бы:

$("#fancybox-inner").height( h );
$("#fancybox-wrap").height( h+20 );
$.fancybox.center();

Я немного проверю, но я думаю, что это может сработать. Что произойдет, если fancybox выше текущей страницы? Страница увеличится в размере?


person testing    schedule 18.09.2012    source источник


Ответы (1)


Вы можете сделать что-то вроде ниже.

 function updateMyFancyBox() {
    $.fancybox.wrap.height($.fancybox.inner.height() + $('div#yourContentDiv').height());//increase fancybox height by adding your div height.
    $.fancybox.update();//Fancybox will re-size according to new size, if it exceeds size limit, it will show scroll bar.
 }
person Estin Chin    schedule 28.11.2012