zoukankan      html  css  js  c++  java
  • 【html】iframe 的高度自适应

    一、demo

    <!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>
    View Code

    二、扩展一: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. 语法

    frameObject.contentWindow

    或者

    iframeObject.contentWindow

    3. 浏览器支持

    Internet ExplorerFirefoxOperaGoogle ChromeSafari

    所有主要浏览器都支持 contentWindow 属性

    4. demo:

    https://www.runoob.com/try/try.php?filename=tryjsref_iframe_contentdocument

    相关资料:

      

  • 相关阅读:
    python
    【转载】【CPU】关于x86、x86_64/x64、amd64和arm64/aarch64
    【百思不得其解1】诡异的速度差异
    LeakCanary 与 鹅场Matrix ResourceCanary对比分析
    android 插件化框架VitualAPK
    android高级篇收录
    滴滴Booster移动APP质量优化框架 学习之旅 三
    滴滴Booster移动APP质量优化框架 学习之旅 二
    滴滴Booster移动APP质量优化框架 学习之旅
    不一样视角的Glide剖析
  • 原文地址:https://www.cnblogs.com/websmile/p/12889310.html
Copyright © 2011-2022 走看看