【html】iframe 的高度自适应
一、demo
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="sv"> <head> <meta charset="utf-8" /> <title>Iframe height demo</title> <style media="screen,print"> #body { width: 70em; max-width: 100%; margin: 0 auto; } iframe { width: 100%; margin: 0 0 1em; border: 0; } </style> <script> /* * When the iframe is on a different subdomain, uncomment the following line * and change "example.com" to your domain. */ // document.domain = "example.com"; function setIframeHeight(iframe) { if (iframe) { var iframeWin = iframe.contentWindow || iframe.contentDocument.parentWindow; if (iframeWin.document.body) { iframe.height = iframeWin.document.documentElement.scrollHeight || iframeWin.document.body.scrollHeight; console.log(iframeWin.document.documentElement.scrollHeight , iframeWin.document.body.scrollHeight); } } }; </script> </head> <body> <div id="body"> <h1>Iframe height demo</h1> <h2><code>iframe</code> <strong>with</strong> height adjustment</h2> <iframe src="iframe高度自适应-src.html" frameborder="0" id="external-frame" onload="setIframeHeight(this)"></iframe> </div> </body> </html>
二、扩展一:iframe自适应高度 document.body.scrollHeight取值不对
浏览器所有内容高度: 浏览器整个框架的高度,包括滚动条卷去部分+可视部分+底部隐藏部分的高度总和。
浏览器滚动部分高度: 滚动条卷去部分高度即可视顶端距离整个对象顶端的高度。
1. 适配3wschool,即DTD声明了
1-1. IE浏览器
document.documentElement.scrollHeight——浏览器所有内容高度
document.body.scrollHeight——浏览器所有内容高度
document.documentElement.scrollTop——浏览器滚动部分高度
document.body.scrollTop——始终为0
document.documentElement.clientHeight——浏览器可视部分高度
document.body.clientHeight——浏览器所有内容高度
1-2. 火狐浏览器firefox
document.documentElement.scrollHeight——浏览器所有内容高度
document.body.scrollHeight——浏览器所有内容高度
document.documentElement.scrollTop——浏览器滚动部分高度
document.body.scrollTop——始终为0
document.documentElement.clientHeight——浏览器可视部分高度
document.body.clientHeight——浏览器所有内容高度
1-3. Chrome谷歌浏览器
document.documentElement.scrollHeight——浏览器所有内容高度
document.body.scrollHeight——浏览器所有内容高度
document.documentElement.scrollTop——始终为0
document.body.scrollTop——浏览器滚动部分高度
document.documentElement.clientHeight——浏览器可视部分高度
document.body.clientHeight——浏览器所有内容高度
——————————————————————————————————————————————
2.未完全适配3wschool,即DTD声明了
2-1. IE浏览器
document.documentElement.scrollHeight——浏览器可视部分高度
document.body.scrollHeight——浏览器所有内容高度
document.documentElement.scrollTop——始终为0
document.body.scrollTop——浏览器滚动部分高度
document.documentElement.clientHeight——始终为0
document.body.clientHeight——浏览器可视部分高度
2-2. 火狐浏览器firefox
document.documentElement.scrollHeight——浏览器可视部分高度
document.body.scrollHeight——浏览器所有内容高度
document.documentElement.scrollTop——始终为0
document.body.scrollTop——浏览器滚动部分高度
document.documentElement.clientHeight——浏览器所有内容高度
document.body.clientHeight——浏览器可视部分高度
2-3. Chrome谷歌浏览器
document.documentElement.scrollHeight——浏览器可视部分高度
document.body.scrollHeight——浏览器所有内容高度
document.documentElement.scrollTop——始终为0
document.body.scrollTop——浏览器滚动部分高度
document.documentElement.clientHeight——浏览器所有内容高度
document.body.clientHeight——浏览器可视部分高度
从上面的情况可以得出
1、document.documentElement.scrollTop和document.body.scrollTop始终有一个为0,所以可以用这两个的和来求scrollTop
2、scrollHeight、clientHeight 在DTD已声明的情况下用documentElement,未声明的情况下用body
PS:可以使用 document.compatMode 可以用来判断是否声明了DTD,得值进行判断。
我们则没有使用document.compatMode来判断,而是直接
var bodyHeight=document.body.scrollHeight==0?document.documentElement.scrollHeight:document.body.scrollHeight;
var height = bodyHeight -70;
三、扩展二:Frame/IFrame contentWindow 属性
1. 定义和用法
contentDocument 属性能够以 HTML 对象来返回 iframe 中的文档。
可以通过所有标准的 DOM 方法来处理被返回的对象。
2. 语法
或者
iframeObject.contentWindow
3. 浏览器支持
所有主要浏览器都支持 contentWindow 属性
4. demo:
https://www.runoob.com/try/try.php?filename=tryjsref_iframe_contentdocument
相关资料:
欢迎关注我,一起进步!扫描下方二维码即可加我QQ
![](https://www.cnblogs.com/images/cnblogs_com/websmile/1492407/t_smile%E8%BD%AC%E8%A7%92.jpg)