网站地图    收藏   

主页 > 前端 > javascript >

iframe同域跨域高度自适应的实现

来源:自学PHP网    时间:2014-09-19 14:47 作者: 阅读:

[导读] 本文章收集大量的关于iframe同域跨域高度自适应的实现程序代码,下面我来给大家介绍介绍。...

本效果的实现需要父页面和子页面都需要作相应的设置
以下是具体的设置及代码

一、父层页面的设置

1、是父层的iframe引入

 代码如下 复制代码

<iframe frameborder="0" scrolling="no" width="100%" src="iframe.html" id="paopaowang"></iframe>


2、父层要设计一个域名的变量 domain

 代码如下 复制代码

<script type="text/javascript">
   document.domain = "aqy106.com";
</script>

二、包含的iframe的设置

  在这个页面里,你需要给你的body或用一个容器将iframe中的所有元素包裹,然后添加一个个id

1.id="bodybox"
  然后再添加以下的脚本代码,其中要注意的是 document.domain = “aqy106.com”; 这里的域名要设置成和父层一样的域名

 代码如下 复制代码

<script type="text/javascript">
    document.domain = "aqy106.com";
    function reSetHeight(h, scl) {
        if (!top.document.getElementById("paopaowang")) return;
        with (top.document.getElementById("paopaowang")) {
            if (offsetHeight != h) {
                style.height = h + 'px';
            }
        }
        top.document.body.style.height = top.document.body.scrollHeight;
        if (!scl) {
            if (top.document.documentElement.scrollTop) top.document.documentElement.scrollTop = 0;
            if (top.document.body.scrollTop) top.document.body.scrollTop = 0;
        }
        h=document.getElementById("bodybox").offsetHeight;
        with (top.document.getElementById("paopaowang")) {
            if (offsetHeight != h) {
                style.height = h + 'px';
            }
        }
    }
    window.onload=function(){
        reSetHeight(document.getElementById("bodybox").offsetHeight);
    }
</script>

至此已全部完成,具体代码已很简单明了,可以自行修改和分析,各位具体可以尝试将代码放到同域或不同域中尝试。
但该脚本也有不完美的地方,就是如果iframe页面中有脚本进行操作,改变了iframe页面的高度,父层的页面的iframe的高度无法自动适应,也就只能实现浏览器初次载入能成功获取iframe的高度和加载高度,但在firame中的操作时父层无法实时的适应高度,所以还是有改进的地方的,以后将继续完善。


其它站长提供的方法

关键代码:

iframe主页面:main.html

 代码如下 复制代码

<iframe id="iframeB"  name="iframeB" src="www.b.com/B.html" width="100%" height="auto" scrolling="no" frameborder="0"></iframe>

iframe嵌套页面:B.html

 代码如下 复制代码

<iframe id="iframeA" name="iframeA" src="" width="0" height="0" style="display:none;" ></iframe>
<script type="text/javascript">
function sethash(){
hashH = document.documentElement.scrollHeight; //获取自身高度
urlC = "www.a.com/A.html"; //设置iframeA的src
document.getElementById("iframeA").src=urlC+"#"+hashH; //将高度作为参数传递
}
window.onload=sethash;
</script>

中介页面:A.html

 代码如下 复制代码

<script>
function pseth() {
var iObj = parent.parent.document.getElementById('iframeB');//A和main同域,所以可以访问节点
iObjH = parent.parent.frames["iframeB"].frames["iframeA"].location.hash;//访问自己的location对象获取hash值
iObj.style.height = iObjH.split("#")[1]+"px";//操作dom
}
pseth();
</script>

跨域方法

实现原理:比如现在有两个网站域名分别为A.com;  B.com;  A网站有个Iframe,需要把B网站放到该Iframe中,但是Iframe的高度 得先获取B网站的页面高度,然后根据所获取的高度来修改A网站Iframe的高度值。  1: 是要在B网站(即下属网站)获取自己的页面的高度,  2:B网站没权限修改A网站的高度,需要一个中间页面,该中间页面可以修改A网站的高度,so.这个中间页面必须与A网站在同一个域下。

A网站的关键代码:

 代码如下 复制代码

<iframe id="iframepage" name="iframepage"  frameborder="0" scrolling="no" width="100%" src="@ViewData["urlstr"]">
</iframe>    //src是B网站的页面地址

B网站的关键代码:

在B网站下也加一个iframe,该iframe是为了导向A网站的中间页面,从而改掉A网站的Iframe高度。

 代码如下 复制代码

<!DOCTYPE html>
<html>
<head>

<script type="text/javascript">

  $(function () {

    hashH = document.documentElement.scrollHeight;
            urlC = "http://www.:9001/Home/Agent";                           //为A域名的中间页面,此处一定要用域名,不能用Ip
            document.getElementById("MiddleIframe").src=urlC+"#"+hashH;
        });

</script>

</head>
<body>
    <div class="topTitle">
        .....
    </div>
    @RenderBody()
    <iframe id="MiddleIframe" name="MiddleIframe" src="http://www.:9001/Home/Agent" width="0" height="0" style="display: none;">
    </iframe>
</body>
</html>

中间页面的关键代码:

该页面是在A域名下的一个文件,由上面的src知道我就是在A网站的HomeController下开了个Agent的方法

 代码如下 复制代码

<script type="text/javascript">  
    $(function () {
        var iObj = parent.parent.document.getElementById('iframepage');      //找到该域下的iframe然后修改其值
        iObjH = parent.parent.frames["iframepage"].frames["MiddleIframe"].location.hash;
        iObj.style.height = iObjH.split("#")[1] + "px";
    });   
</script>

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论