当前位置:  开发笔记 > 编程语言 > 正文

调整iframe的宽度和高度以适应其中的内容

如何解决《调整iframe的宽度和高度以适应其中的内容》经验,为你挑选了9个好方法。

我需要一个解决方案自动调节widthheight一个iframe勉强适合其内容.关键是iframe加载后可以更改宽度和高度.我想我需要一个事件动作来处理iframe中包含的主体尺寸的变化.



1> Ahmy..:




另外不要忘记它不是跨域.它得到一种_Error的原因:如果域不同,则拒绝访问属性'document'的权限.可以找到解决方案[这里](http://css-tricks.com/cross-domain-iframe-resizing/)
if(document.getElementById)有什么用?
条件不仅无用,而且在极少数情况下,它的目的是保证会引起问题.你为什么要检查一个方法是否存在,然后在检查之外使用方法?
@StoneHeart:是的,它是跨浏览器.由于contentWindow属性(在DOM规范中未定义),因此代码是非标准兼容的.在DOM规范中存在名为contentDocument的属性,但Internet Explorer 6(和7?)不支持它.可以使用contentWindow属性,它可以在所有常见的浏览器(Gecko,Opera,Webkit,IE)中实现.
我认为你的意思是`DOMContentLoaded`,因为`DOMContentReady`似乎不是一件事:https://developer.mozilla.org/en-US/search?q=domcontentready&topic=apps&topic=html&topic=css&topic=js&topic=api&topic = Webdev的
不符合标准,但到目前为止最简单的方法.
对于IE9,请尝试`frame.style.height =(newheight)+"px"`和`frame.style.width =(newwidth)+"px";`
如果您不需要支持较旧的浏览器,则在两个窗口之间发送消息可能是一种更清洁的解决方案:http://stackoverflow.com/questions/5606920/cross-domain-iframe-resizer/6940531#6940531

2> FFish..:

跨浏览器的jQuery插件.

Cross-bowser,跨域,用于mutationObserver将iFrame大小保持为内容并postMessage在iFrame和主机页面之间进行通信.使用或不使用jQuery.


iframe-resizer库是最可靠的解决方案。

3> Garnaph..:

到目前为止给出的所有解决方案仅考虑一次性调整大小.您提到您希望能够在修改内容后调整iFrame的大小.为了做到这一点,你需要在iFrame中执行一个函数(一旦内容被更改,你需要触发一个事件来说明内容已经改变).

我被困了一段时间,因为iFrame中的代码似乎仅限于iFrame中的DOM(并且无法编辑iFrame),并且在iFrame外部执行的代码被困在iFrame外部的DOM(并且没有'拿起来自iFrame内部的活动).

解决方案来自于发现(通过同事的帮助)可以告诉jQuery使用什么DOM.在这种情况下,父窗口的DOM.

因此,像这样的代码可以满足您的需求(在iFrame中运行时):



如果iframe中的父文档和文档都来自同一个域***,这可以很好地工作***.如果它们不是(或者,在chrome中,[如果它们都是本地文件](http://stackoverflow.com/questions/19462608/)),则浏览器的"相同来源"安全策略启动并且它可以防止修改父文档的iframe内容.
如何自动触发事件而不是`jQuery("#IDofControlFiringResizeEvent").click(function()`?

4> Guy..:

用于嵌入的单层解决方案:以最小尺寸开始并增加到内容大小.不需要脚本标签.



5> brenjt..:

如果iframe内容来自同一个域,那么这应该很有用.它确实需要jQuery.

$('#iframe_id').load(function () {
    $(this).height($(this).contents().height());
    $(this).width($(this).contents().width());
});

要让它动态调整大小,您可以这样做:



然后在iframe加载的页面上添加:




6> Timo..:

如果您不想使用jQuery,这是一个跨浏览器的解决方案:

/**
 * Resizes the given iFrame width so it fits its content
 * @param e The iframe to resize
 */
function resizeIframeWidth(e){
    // Set width of iframe according to its content
    if (e.Document && e.Document.body.scrollWidth) //ie5+ syntax
        e.width = e.contentWindow.document.body.scrollWidth;
    else if (e.contentDocument && e.contentDocument.body.scrollWidth) //ns6+ & opera syntax
        e.width = e.contentDocument.body.scrollWidth + 35;
    else (e.contentDocument && e.contentDocument.body.offsetWidth) //standards compliant syntax – ie8
        e.width = e.contentDocument.body.offsetWidth + 35;
}



7> petriq..:

我正在使用此代码在页面上加载时自动调整所有iframe(使用类autoHeight)的高度.经过测试,适用于IE,FF,Chrome,Safari和Opera.

function doIframe() {
    var $iframes = $("iframe.autoHeight"); 
    $iframes.each(function() {
        var iframe = this;
        $(iframe).load(function() {
            setHeight(iframe);
        });
    });
}

function setHeight(e) {
  e.height = e.contentWindow.document.body.scrollHeight + 35;
}

$(window).load(function() {
    doIframe();
});


我认为35只是滚动条的厚度
你要添加的神奇之处是什么?您使用哪种浏览器和操作系统进行测量?

8> Adrian P...:

在我尝试了地球上的一切之后,这对我来说真的很有用.

的index.html








9> Mas..:

这是一个可靠的解决方案

function resizer(id)
{

var doc=document.getElementById(id).contentWindow.document;
var body_ = doc.body, html_ = doc.documentElement;

var height = Math.max( body_.scrollHeight, body_.offsetHeight, html_.clientHeight, html_.scrollHeight, html_.offsetHeight );
var width  = Math.max( body_.scrollWidth, body_.offsetWidth, html_.clientWidth, html_.scrollWidth, html_.offsetWidth );

document.getElementById(id).style.height=height;
document.getElementById(id).style.width=width;

}

HTML


推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有