我需要一个解决方案自动调节的width
和height
一个iframe
勉强适合其内容.关键是iframe
加载后可以更改宽度和高度.我想我需要一个事件动作来处理iframe中包含的主体尺寸的变化.
跨浏览器的jQuery插件.
Cross-bowser,跨域库,用于mutationObserver
将iFrame大小保持为内容并postMessage
在iFrame和主机页面之间进行通信.使用或不使用jQuery.
到目前为止给出的所有解决方案仅考虑一次性调整大小.您提到您希望能够在修改内容后调整iFrame的大小.为了做到这一点,你需要在iFrame中执行一个函数(一旦内容被更改,你需要触发一个事件来说明内容已经改变).
我被困了一段时间,因为iFrame中的代码似乎仅限于iFrame中的DOM(并且无法编辑iFrame),并且在iFrame外部执行的代码被困在iFrame外部的DOM(并且没有'拿起来自iFrame内部的活动).
解决方案来自于发现(通过同事的帮助)可以告诉jQuery使用什么DOM.在这种情况下,父窗口的DOM.
因此,像这样的代码可以满足您的需求(在iFrame中运行时):
用于嵌入的单层解决方案:以最小尺寸开始并增加到内容大小.不需要脚本标签.
如果iframe内容来自同一个域,那么这应该很有用.它确实需要jQuery.
$('#iframe_id').load(function () { $(this).height($(this).contents().height()); $(this).width($(this).contents().width()); });
要让它动态调整大小,您可以这样做:
然后在iframe加载的页面上添加:
如果您不想使用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; }
我正在使用此代码在页面上加载时自动调整所有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(); });
在我尝试了地球上的一切之后,这对我来说真的很有用.
的index.html
这是一个可靠的解决方案
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