我已经尝试了一些有关此iframe自动高度问题的答案。
基本上,我想要的是根据iframe内部的内容高度自动调整iframe的高度。
以下是我尝试过的具体内容。
Resizing an iframe based on content
iframe Auto Adjust Height as content changes
id #iframe需要自动调整的iframe是内容的高度,因此我将以下代码分别插入到父文档和iframe的正文中。
<script>
// Resize iframe to full height
function resizeIframe(height)
{
// "+60" is a general rule of thumb to allow for differences in
// IE & and FF height reporting, can be adjusted as required..
document.getElementById('iframe').height = parseInt(height)+60;
}
</script>
和iframe
<body onload="iframeResizePipe()">
<iframe id="helpframe" src='' height='0' width='0' frameborder='0'> </iframe>
<script type="text/javascript">
function iframeResizePipe()
{
// What's the page height?
var height = document.body.scrollHeight;
// Going to 'pipe' the data to the parent through the helpframe..
var pipe = document.getElementById('helpframe');
// Cachebuster a precaution here to stop browser caching interfering
pipe.src = 'http://www.foo.com/helper.html?height='+height+'&cacheb='+Math.random();
}
</script>
这是我遇到问题的网站:http://xefrontier.com
(如果您点击&#39; WALL&#39;标签,iframe就在那里。)
任何人都可以帮我弄清楚,为什么这些代码不会起作用? 感谢。
答案 0 :(得分:1)
Snippet当然不起作用,我只是把它放在那里以满足帖子的要求。请阅读此README.md并查看Plunker demo。所有细节都在README.md中,并在此处发布。
此演示在同源策略下工作,简单地说,父子页面必须位于同一位置:
相同的端口(http://app.domain.com:80)
有3个不同高度的儿童页面。
当我们要控制iframe时,准备布局和iframe属性非常重要。
/* Outer Container */
#iSec {
width: 100vw; /* As wide as your screen */
height: 100vh; /* As tall as your screen */
display: table;/* Will behave like a table */
}
/* iFrame Wrappers */
.jFrame {
position: relative; /* As a non-static element, any descendants can be easily positioned. */
max-height: 100%; /* Being flexible is important when dealing with dynamic content. */
max-width: 100%; /* see above */
overflow-y: auto; /* Scrollbars will appear when height exceeds the viewport (your screen)*/
display: table-cell; /* Will behave like a table-cell
}
/* iFrames */
iframe {
position: absolute; /* Easily positioned within it's parent (`.jFrame`)*/
width: 100%; /* Set the iFrames' attribute as well */
height: 100%; /* Set the iFrames' attribute as well */
top: 0; /* Streches iframes' edges */
left: 0;
bottom: 0;
right: 0;
}
<iframe id="iFrm1" src="iFrm1.html" width="100%" height="100%" scrolling="no" frameborder="0"></iframe>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
我借用和修改的大部分代码来自 这site
//将所有iframe收集到NodeList中,转换为数组,然后调用iFrmHt(),并传递每个iFrame的id。
function loadiFrames() {
var iFrmList = document.querySelectorAll('iframe');
var iFrmArray = Array.prototype.map.call(iFrmList, function(obj) {
var ID = obj.id;
iFrmHt(ID);
});
}
//引用目标iFrame的文档
function iFrmHt(ID) {
var iFrm = document.getElementById(ID);
var iDoc = iFrm.contentDocument || iFrm.contentWindow.document;
var iHt = function(iDoc) {
if (!iDoc) {
iDoc = document;
}
var iKid = iDoc.body;
var iRoot = iDoc.documentElement;
//使用几种不同的方法来确定iFrame的子页面 - 高度。
var iHt = Math.max(iKid.scrollHeight, iKid.offsetHeight,
iRoot.clientHeight, iRoot.scrollHeight, iRoot.offsetHeight);
return iHt;
}
//更改iFrame的高度
iFrm.style.height = iHt + 'px';
console.log('iFrame: ' + iFrm.id);
console.log('height: ' + iHt(iDoc));
}
//如果加载窗口加载,iFrames不应该超时。
window.onload = loadiFrames;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~
<强>段强>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>iFrame Dynamic Height</title>
<style>
#iSec {
width: 100vw;
height: 100vh;
display: table;
}
.jFrame {
position: relative;
max-height: 100%;
max-width: 100%;
overflow-y: auto;
display: table-cell;
}
iframe {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
</style>
</head>
<body>
<section id="iSec">
<div id="i1" class="jFrame">
<iframe id="iFrm1" src="iFrm1.html" width="100%" height="100%" scrolling="no" frameborder="0"></iframe>
</div>
<div id="i2" class="jFrame">
<iframe id="iFrm2" src="iFrm2.html" width="100%" height="100%" scrolling="no" frameborder="0"></iframe>
</div>
<div id="i3" class="jFrame">
<iframe id="iFrm3" src="iFrm3.html" width="100%" height="100%" scrolling="no" frameborder="0"></iframe>
</div>
</section>
<script>
function loadiFrames() {
var iFrmList = document.querySelectorAll('iframe');
var iFrmArray = Array.prototype.map.call(iFrmList, function(obj) {
var ID = obj.id;
iFrmHt(ID);
});
}
function iFrmHt(ID) {
var iFrm = document.getElementById(ID);
var iDoc = iFrm.contentDocument || iFrm.contentWindow.document;
var iHt = function(iDoc) {
if (!iDoc) {
iDoc = document;
}
var iKid = iDoc.body;
var iRoot = iDoc.documentElement;
var iHt = Math.max(iKid.scrollHeight, iKid.offsetHeight,
iRoot.clientHeight, iRoot.scrollHeight, iRoot.offsetHeight);
return iHt;
}
iFrm.style.height = iHt + 'px';
console.log('iFrame: ' + iFrm.id);
console.log('height: ' + iHt(iDoc));
}
window.onload = loadiFrames;
</script>
</body>
</html>
&#13;
答案 1 :(得分:0)
多年前,另一位用户在StackOverflow上发布了这个问题和解决方案。
Full-screen iframe with a height of 100%
此方法使用CSS而不是JS来设置IFRAME的维度。