惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
H
Help Net Security
V
Visual Studio Blog
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
The Cloudflare Blog
Martin Fowler
Martin Fowler
D
Docker
腾讯CDC
F
Fortinet All Blogs
雷峰网
雷峰网
GbyAI
GbyAI
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - 叶小钗

博客园 - kagar

挖掘经典:几乎被人遗忘的HTML七种用法 【转】P2P穿透NAT原理 关于delphi调用.net com的详细过程 3desj加密 C++ ,C#类型对照 DLL+ ActiveX控件+WEB页面调用例子 测试 表空间 Sql Server2005不同的表使用不同的表空间 Office文档在线编辑的实现之二 如何在Web页面上直接打开、编辑、创建Office文档 Foursquare引爆了什么 承博士:让云计算落地生根的中国云计算平台 PHP - Smarty 工作流系统功能列表系列 五种丑陋的项目管理 Chart 报表 jQuery 数据仓库与事务型数据库的区别 RUP与XP的平衡之道
跨域情况下Iframe高度自适应解决方案 - kagar - 博客园
kagar · 2009-05-08 · via 博客园 - kagar

跨域情况下Iframe高度自适应解决方案

相信很多人的遇到过跨域情况下Iframe高度自适应的问题,在百度和Google上找了很久,都没有找到合适的一解决方案,一次遇然机会,发现了window.navigator这个对象居然在能够在所有的Iframe中均可以访问的对象。下面是基于该对象的一个iframe跨域解决方案
对window.navigator这个对象进行扩展,可以将该js代码存在一个iframe.js文件,以后在父页面调用这个js即可

//声明一个数组用来保存所有的Iframe
window.navigator.Allframes=null;
window.navigator.Allframes=...{''$Top_Page$'':window};
//根据页面name属性查找到子页面所在Ifame对象
window.navigator.getFrameByName=function(oName)...{
    return this.Allframes[oName]
};
//将一个Iframe对象注册到window.navigator.Allframes数组中
window.navigator.registerFrame=function(oName,oElement)...{
    this.Allframes[oName]=oElement
};
//提供一个方法将一个子页面封装成一个对象
window.navigator.createFrame=function(childPage)...{    
    var fun=function()...{    
        this.objChildPage=childPage;
        this.getFrameByName=function(oName)...{
            return window.navigator.getFrameByName(oName)
        };
        this.resizeHeight=function()...{
            try...{
                var height=this.objChildPage.document.body.scrollHeight;
                if(this.objChildPage.name&&height)...{
                    var curIframe=window.navigator.getFrameByName(this.objChildPage.name);
                    curIframe.height=height;
                    return document.body.scrollHeight;
                }
            }catch(ex)...{
                //异常处理
            }
        }
    };
    return new fun
};

父页面parent.html,在http://parent.testdomain.com/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>父页面</title>
    <SCRIPT language="javascript" src="iframe.js" /></script>
    <!--通过CSS的方式为所有的Iframe注册,也可以通过javascript方式调用window.navigator.registerFrame注册指定的Iframe-->
    <STYLE>iframe{behavior:expression(function(element){window.navigator.registerFrame(element.name, element);}(this))}</STYLE>
</head>
<body>
    <iframe id="childPage" name="childPage" src="http://child.testdomain.com/" width="100%" height="50px"  ></iframe>
</body>
</html>
子页面(child.html)在http://child.testdomain.html/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>子页面</title>
    <SCRIPT LANGUAGE="JavaScript">
    //在body.onload中调用
    function AutoResizeHeight(){
      try{
          var control = window.navigator.createFrame(this);
          control.resizeHeight();
       }catch(ex){}
    }
    </script>
</head>
<body onload="AutoResizeHeight()">
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
<p>Hello World!</p>
</body>
</html>