谷歌似乎辜负了他们的标语“不作恶”。虽然 Chrome 能够动态调整 iframe 高度,但谷歌并没有让它变得很容易。经过两天的努力解决这个问题并尝试了大量的 JavaScript 片段,这些片段在所有其他浏览器中都能完美运行,但 Chrome 终于设法得到了一些可以工作的东西。我将分享这一点,希望能帮助其他网站开发人员免去我不得不经历的 48 小时痛苦。
在外部 SetiFrameHeight.js 文件中,然后可以将其添加到任何带有 html 的 iframe 子文档中。
<script type="text/javascript" src="SetiFrameHeigh.js"></script>
setIframeHeight.js
window.onload=setIframeHeight(window.top.document.getElementById('iFrame_ID'));
//note this code only runs serverside when using Google Chrome, very helpful
function setIframeHeight(ifrm){
var doc = ifrm.contentDocument? ifrm.contentDocument:
ifrm.contentWindow.document;
var RestHeight=ifrm.style.height; //Capture original height see why below.
ifrm.style.visibility = "hidden";
ifrm.style.height = "10px"; //Necessary to work properly in some browser eg IE
var NewHeight = getDocHeight( doc ) + 10;
if (NewHeight>20){
ifrm.style.height=NewHeight + "px";
} else { //if dom returns silly height value put back old height see above.
ifrm.style.height=RestHeight + "px";
}
ifrm.style.visibility = "visible";
}
function getDocHeight(doc) {
doc = doc || document;
var body = doc.body, html = doc.documentElement;
var height = Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight,
html.scrollHeight, html.offsetHeight );
return height;
}
这段代码片段的真正魔力在于函数 getDocHeight,它基本上尝试了所有可能的 dom 组合并选择给出最大高度的组合。我不能把它归功于http://www.christersvensson.com/html-tool/iframe.htm。