0

我正在尝试使用 javascript 在网站上调整 iframe 的大小,以便 iframe 与里面的内容一样长。我的代码如下:

var iFrames = $('iframe');

function iResize() {        
    for (var i = 0, j = iFrames.length; i < j; i++) {
        iFrames[i].style.height = iFrames[i].contentWindow.document.body.offsetHeight + 'px';
    }
}

console.log( 'resize frame before' );
if ($.browser.safari || $.browser.opera) {
    console.log( 'if' );            
    iFrames.load(function(){
        setTimeout(iResize, 0);
    });

    for (var i = 0, j = iFrames.length; i < j; i++) {
        var iSource = iFrames[i].src;
        iFrames[i].src = '';
        iFrames[i].src = iSource;
    }               
} else {
    console.log( 'else' );
    $( '.iframe' ).load(function() { 
        console.log( 'load' );
        this.style.height = this.contentWindow.document.body.offsetHeight + 'px';
    });
}
console.log( 'resize frame end' );

它不起作用,但是使用 console.log 唯一没有出现的日志是在“加载”函数内。

我正在调用页面底部的所有 javascript,我不确定这是否导致问题。

任何帮助将不胜感激。


编辑:源代码在https://github.com/xonorageous/projet-sas 网站可以在http://daniel-lucas.com/experiments-dir/projet-sas/查看

4

1 回答 1

1

您可以在 jQuery 中更轻松地实现这一点:

$(function(){

        var iFrames = $('iframe');

        function iResize() {

            for (var i = 0, j = iFrames.length; i < j; i++) {
              iFrames[i].style.height = iFrames[i].contentWindow.document.body.offsetHeight + 'px';}
            }

            if ($.browser.safari || $.browser.opera) { 

               iFrames.load(function(){
                   setTimeout(iResize, 0);
               });

               for (var i = 0, j = iFrames.length; i < j; i++) {
                    var iSource = iFrames[i].src;
                    iFrames[i].src = '';
                    iFrames[i].src = iSource;
               }

            } else {
               iFrames.load(function() { 
                   this.style.height = this.contentWindow.document.body.offsetHeight + 'px';
               });
            }

        });

请参阅此处获取原始来源> http://css-tricks.com/snippets/jquery/fit-iframe-to-content/

于 2012-12-12T17:45:54.483 回答