4

我使用此代码自动调整 iframe 的大小http://sonspring.com/journal/jquery-iframe-sizing。工作得很好,但是昨天当我将搜索引擎用作 iframe 时出现了一个问题,因为结果需要 0.5 到 1 秒才能显示出来,自动调整大小无法正确调整窗口大小,所以我认为我需要将脚本延迟 0.5 秒。我怎样才能做到这一点 ?

这是来自 iframe.js 的代码

$(document).ready(function()
{
    // Set specific variable to represent all iframe tags.
    var iFrames = document.getElementsByTagName('iframe');

    // Resize heights.
    function iResize()
    {
        // Iterate through all iframes in the page.
        for (var i = 0, j = iFrames.length; i < j; i++)
        {
            // Set inline style to equal the body height of the iframed content.
            iFrames[i].style.height = iFrames   [i].contentWindow.document.body.offsetHeight + 'px';
        }
    }

    // Check if browser is Safari or Opera.
    if ($.browser.safari || $.browser.opera)
    {
        // Start timer when loaded.
        $('iframe').load(function()
            {
                setTimeout(iResize, 0);
            }
        );

        // Safari and Opera need a kick-start.
        for (var i = 0, j = iFrames.length; i < j; i++)
        {
            var iSource = iFrames[i].src;
            iFrames[i].src = '';
            iFrames[i].src = iSource;
        }
    }
    else
    {
        // For other good browsers.
        $('iframe').load(function()
            {
                // Set inline style to equal the body height of the iframed content.
                this.style.height = this.contentWindow.document.body.offsetHeight + 'px';
            }
        );
    }
}
);
4

2 回答 2

0

很难在没有看到您的 html 的情况下准确回答。您可以调整setTimout(iResize, 500);哪个将在 0.5 秒后检查。

或者,这是我在调整单个 iframe 大小时使用的。

它将继续每 50 毫秒检查一次,以查看 body 元素是否已加载。

function resizeIframe(iframe){
    var doc = iframe.contentDocument ||  iframe.contentWindow.document;
    if(doc.body){
        iframe.height =0;
        iframe.height = doc.body.scrollHeight + 30;
    }
    else{
         if(delay)clearTimeout(delay)
          delay = setTimeout(function(){resize(iframe)},50);
    }
};

var delay, iframe = document.getElementById('iFrame'); 


resizeIframe(iframe);
于 2013-03-19T07:49:43.970 回答
0

您需要使用 mutationObserver 来检测页面中的更改并触发 iFrame 的调整大小。

在 GitHub 上签出这个项目,它将为你做这件事。

https://github.com/davidjbradshaw/iframe-resizer

于 2014-03-14T23:59:12.160 回答