原创,真正解决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高度那么其解决思路是一样的,照着葫芦画个瓢就行了.

原文地址:https://www.cnblogs.com/see7di/p/2239685.html