make iframe height dynamic based on content inside- JQUERY/Javascript

前端 未结 20 1979
情书的邮戳
情书的邮戳 2020-11-22 07:42

I am loading an aspx web page in an iframe. The content in the Iframe can be of more height than the iframe\'s height. The iframe should not have scroll bars.

I have

相关标签:
20条回答
  • 2020-11-22 07:58

    I found the answer from Troy didn't work. This is the same code reworked for ajax:

    $.ajax({                                      
        url: 'data.php',    
        dataType: 'json',                             
    
        success: function(data)
        {
            // Put the data onto the page
    
            // Resize the iframe
            var iframe = $(window.top.document).find("#iframe");
            iframe.height( iframe[0].contentDocument.body.scrollHeight+'px' );
        }
    });
    
    0 讨论(0)
  • 2020-11-22 08:00

    You can refer related question here - How to make width and height of iframe same as its parent div?

    To set dynamic height -

    1. We need to communicate with cross domain iFrames and parent
    2. Then we can send scroll height/content height of iframe to parent window

    And codes - https://gist.github.com/mohandere/a2e67971858ee2c3999d62e3843889a8

    0 讨论(0)
  • 2020-11-22 08:01

    Sample using PHP htmlspecialchars() + check if height exists and is > 0:

    $my_html_markup = ''; // Insert here HTML markup with CSS, JS... '<html><head></head><body>...</body></html>'
    $iframe = '<iframe onload="if(this.contentWindow.document.body.scrollHeight) {this.height = this.contentWindow.document.body.scrollHeight;}" width="100%" src="javascript: \''. htmlspecialchars($my_html_markup) . '\'"></iframe>';
    
    0 讨论(0)
  • 2020-11-22 08:06

    Just in case this helps anyone. I was pulling my hair out trying to get this to work, then I noticed that the iframe had a class entry with height:100%. When I removed this, everything worked as expected. So, please check for any css conflicts.

    0 讨论(0)
  • 2020-11-22 08:09

    There are four different properties you can look at to get the height of the content in an iFrame.

    document.documentElement.scrollHeight
    document.documentElement.offsetHeight
    document.body.scrollHeight
    document.body.offsetHeight
    

    Sadly they can all give different answers and these are inconsistant between browsers. If you set the body margin to 0 then the document.body.offsetHeight gives the best answer. To get the correct value try this function; which is taken from the iframe-resizer library that also looks after keeping the iFrame the correct size when the content changes,or the browser is resized.

    function getIFrameHeight(){
        function getComputedBodyStyle(prop) {
            function getPixelValue(value) {
                var PIXEL = /^\d+(px)?$/i;
    
                if (PIXEL.test(value)) {
                    return parseInt(value,base);
                }
    
                var 
                    style = el.style.left,
                    runtimeStyle = el.runtimeStyle.left;
    
                el.runtimeStyle.left = el.currentStyle.left;
                el.style.left = value || 0;
                value = el.style.pixelLeft;
                el.style.left = style;
                el.runtimeStyle.left = runtimeStyle;
    
                return value;
            }
    
            var 
                el = document.body,
                retVal = 0;
    
            if (document.defaultView && document.defaultView.getComputedStyle) {
                retVal =  document.defaultView.getComputedStyle(el, null)[prop];
            } else {//IE8 & below
                retVal =  getPixelValue(el.currentStyle[prop]);
            } 
    
            return parseInt(retVal,10);
        }
    
        return document.body.offsetHeight +
            getComputedBodyStyle('marginTop') +
            getComputedBodyStyle('marginBottom');
    }
    
    0 讨论(0)
  • 2020-11-22 08:09

    A slightly improved answer to BlueFish...

    function resizeIframe(iframe) {
        var padding = 50;
        if (iframe.contentWindow.document.body.scrollHeight < (window.innerHeight - padding))
            iframe.height = iframe.contentWindow.document.body.scrollHeight + "px";
        else
            iframe.height = (window.innerHeight - padding) + "px";
    }
    

    This takes in consideration the height of the windows screen(browser, phone) which is good for responsive design and iframes that have huge height. Padding represents the padding you want above and below the iframe in the case it goes trough whole screen.

    0 讨论(0)
提交回复
热议问题