zoukankan      html  css  js  c++  java
  • 原创,真正解决iframe高度自适应的问题.兼容各浏览器

         在Google输入关键字"iframe自适应高度"之后你会发现有"找到约 153,000 条结果",我大概的看了一下,发现基本上就那两三篇文章被转载来转载去.真正解决问题的没有.那我今天就不和他们同流合污了,经过我的深入研究和各种尝试最终找到了解决办法,分享给大家.
         解决高度自适应的问题有两种办法:
         方法一,在每个被包含页在本身内容加载完毕之后,执行JS取得本页面的高度,然后去同步父页面的iframe高度。这个做法很扯淡,因為需要在每个被包含页都要去加入一段相同的JS代码来做这个事情,创建了好多副本,想像一下假如我们在自己的框架内包含的是www.baidu.com呢,這種做法打死也實現不了.

         方法二,在主页面 iframe的onload事件中执行JS,去取得被包含页的高度内容,然后去同步高度。這才是我們今天所需要研究的方法。

         以上的方法都只处理了静的东西,就是只在内容加载的时候执行,如果JS去操作DOM引起的高度变化,此時就需要再次進行同步一次才能確保高度適應.
    有人会说这样就可以了:可這樣沒辦法在我們靜態修改iframe的src值之后再次同步高度.
    <iframe id="iFrame1" name="iFrame1" width="100%" onload="this.height=iFrame1.document.body.scrollHeight" frameborder="0" src="index.htm"></iframe>


    下邊是我使用jquery寫的實現方法,为了照顾IE这头不合群的倔驴,所以下边的代码单独照顾了一下他:

    <script src='img/jquery-1.6.1.min.js'></script>
    <script type='text/javascript'>
    (function($){
        //讓iframe自適應高度欢迎转载但请注明出处Email:See7di@Gmail.com,Seven的部落格http://hi.baidu.com/see7di/home
        $.AutoiFrame = function(_o){
            var _o_=new Function("return "+_o)();
            if($.browser.msie){
                $('#'+_o).ready(function(){$('#'+_o).height(_o_.document.body.scrollHeight)});
            }else{
                $('#'+_o).load(function(){$('#'+_o).height(_o_.document.body.scrollHeight)});
            }
        }
    })(jQuery);
    $(function(){
        $.AutoiFrame('f_1');
    });欢迎转载但请注明出处Email:See7di@Gmail.com,Seven的部落格http://hi.baidu.com/see7di/home

    </script>

    上邊的代碼就可以實現在頁面載入的時候自動修正iframe的高度,讓其高度自適應,那如果我們打開頁面之後再次修改了iframe內的src怎麼同步呢?方法看下邊:

    <input onclick="$.AutoiFrame('f_1')" value="....

    或者如果你感覺這樣太麻煩,沒關係我們還有解決方法,那你就用setInterval吧,他可以定時循環執行,即間隔多長時間執行一次.

    window.setInterval(function(){$.AutoiFrame('f_1')},100);//延迟100毫秒循环執行一次
    這樣一來保證讓你的iframe乖乖的,且會服服帖帖,想怎麼整治都行了,哦,顺便说一下如果你感兴趣的是iframe的宽度而非iframe高度那么其解决思路是一样的,照着葫芦画个瓢就行了.

  • 相关阅读:
    Compression algorithm (deflate)
    tcpip数据包编码解析(chunk and gzip)_space of Jialy_百度空间
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    gzip压缩算法: gzip 所使用压缩算法的基本原理
    Decompressing a GZip Stream with Zlib
    Frequently Asked Questions about zlib
    how to decompress gzip stream with zlib
    自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    C语言抓http gzip包并解压 失败 C/C++ ChinaUnix.net
  • 原文地址:https://www.cnblogs.com/see7di/p/2239685.html
Copyright © 2011-2022 走看看