iframe跨域自适应高度

在跨域的情况下,不能通过直接获取子页面的高度,这就需要辅助页面的帮忙。

这里就需要a.html,b.html,c.html,和a.js!

假设a嵌套c,并且a和c不同域,这时候我们就需要用与a同域的b.html来作为传递参数的页面。

代码如下:

a.html

 <!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
    <title>a.html</title>
  </head>
  <body>
    <iframe src="你的地址" id="ifr"></iframe>
  </body>
</html> 
这边并没有什么特殊的地方,按照正常的写就行!
 
a.js
//获取c.html的高度
function calcPageHeight(doc) {
    var cHeight = Math.max(doc.body.clientHeight, doc.documentElement.clientHeight)
    var sHeight = Math.max(doc.body.scrollHeight, doc.documentElement.scrollHeight)
    var height  = Math.max(cHeight, sHeight);

    return height;
}
//将获取到的高度用url将参数传给b.html
window.onload = function() {

    var doc = document;
 var myifr = doc.getElementById('myifr');
if (myifr) {
        myifr.src = 'b.html的地址';
           
    }
    var height = calcPageHeight(doc)
    if (myifr) {
        myifr.src = 'b.html的地址?height=' + height     
    }
}; 
这里的关键就是把获取到的c.html得高度传给b.html,这也是跨域实现自适应的关键,注意,这里js放在a.html的同域
 
b.html
 <!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' />
    <title>B.html</title>
  </head>
  <body>
    <script type="text/javascript">
        window.onload = function() {
            var isSet = false
            var inteval = setInterval(function() {
                var search = location.search.replace('?', '')
                if (isSet) {
                    clearInterval(inteval)
                    return  
                }
                if (search) {
                    var height = search.split('=')[1]
                    var doc = parent.parent.document
                    var ifr = doc.getElementById('ifr')
                    ifr.style.height = height + 'px'
                    isSet = true
                }
            }, 500)
        }
    </script>
  </body>
<html> 
这里就是将获取到的c.html高度的值改变a.html里iframe的高度。
 
最后在c.html用id为myifr的iframe嵌套b.html并且隐藏起来就行,还有就是别忘了引入a.js!
 
posted @ 2016-07-25 16:16  Xile萨玛  阅读(149)  评论(0)    收藏  举报