IFrame跨域高度自适应实现代码


Posted in Javascript onAugust 16, 2012
var iframeids = ['memberIndexIframe','inquiryCenterIframe','everychinaBbsIframe']; 
var iframehide = "yes"; 
function dynIframeSize(){ 
var dyniframe = []; 
for(var i=0;i<iframeids.length;i++){ 
if(!document.getElementById) return false; 
dyniframe[i] = document.getElementById(iframeids[i]); 
if(dyniframe[i] && !window.opera){ 
dyniframe[i].style.display = "block"; 
if(dyniframe[i].contentDocument && dyniframe[i].contentDocument.body.offsetHeight){ 
dyniframe[i].height = dyniframe[i].contentDocument.body.offsetHeight; 
}else if(dyniframe[i].Document && dyniframe[i].Document.body.scrollHeight){ 
dyniframe[i].height = dyniframe[i].Document.body.scrollHeight; 
} 
} 
if((document.all || document.getElement) && iframeids == "no") { 
var tempobj = document.all?document.all[iframeids[i]] : document.getElementById(iframeids[i]); 
tempobj.style.display = "block"; 
} 
} 
} 
if (window.addEventListener) 
window.addEventListener("load", dynIframeSize, false) 
else if (window.attachEvent) 
window.attachEvent("onload", dynIframeSize) 
else { 
window.onload = dynIframeSize; 
}

对于上面的代码直接保存一个文件iframe.js,然后引用即可

注意:这段代码对于跨域的iframe引用不太适用,需要特别定义其iframe高度

下面这个代码是跨域的iframe高度

项目网站中需要嵌入合作网站的页面,这就需要页面的自适应高度变化,并且是跨域的。在网上看了许多资料,加上自己的实践,终于实现了跨域的IFrame自适应高度。如下:

首先,我的页面a.html需要引入对方的b.html,在这里运用iframe方式实现页面的套用
a.html页面的主要代码如下:

<BODY> 
<iframe width="100%" id="a_iframe" name="a_iframe" src="http://对方域名/b.html" 
frameborder="no" border="0px" scrolling="no" allowtransparency="yes" ></iframe> 
</BODY>

a.html页面只是用来引入对方页面的一个简单页面 这就不多做介绍。
然后,最好在a.html同一级目录下,创建一个agent.html页面,该页面用来得到对方通过js传递过来的参数,
根据高度参数来调整a.html中的a_iframe的高度,主要代码如下:
Js代码
<script type="text/javascript"> 
//得到a.html中的a_iframe 
var a_iframe = parent.parent.document.getElementById("a_iframe"); 
//<SPAN>location.hash用来获取页面的标签值</SPAN> 
,这个值通过b.html中的js函数改变。包括height属性 
var hash_url = window.location.hash; 
//得到b.html传递过来的height属性 
var hash_height = hash_url.split("#")[1]+"px"; 
//调整a_iframe的height,达到自适应 
a_iframe.height = hash_height; 
</script>

最后,对方的页面(b.html),让对方在b.html中加入以下javascript代码
<iframe id="b_iframe" width="100%" src="http://我的域名/../agent.html" style="display:none"> 
</iframe> 
<script type="text/javascript"> 
var b_height = Math.max(document.body.scrollHeight,document.body.clientHeight); 
var b_iframe = document.getElementById("b_iframe"); 
b_iframe.src = b_frame.src+"#"+b_height; 
</script>

通过 Math.max(clientHeight,scrollHeight)比较网页可见区域高,网页正文全文高这两者得到其中的较大的值后,
iframe将这个height通过src传递到我的agent.html,这样a.html中的Iframe就能自适应对方的b.html高度了。这里在IE下测试的没问题,其它浏览器没测试。
在实现这个功能的过程中,在网上发现了一段很有用的获取页面高度的js,在这里也记录、引用下:
<script> 
var strInfo=" " ; 
strInfo+=" \r\n网页可见区域宽:" +document.body.clientWidth; 
strInfo+=" \r\n网页可见区域高:" +document.body.clientHeight; 
strInfo+=" \r\n网页可见区域宽:" +document.body.offsetWidth+" (包括边线的宽)" ; 
strInfo+=" \r\n网页可见区域高:" +document.body.offsetHeight+" (包括边线的宽)" ; 
strInfo+=" \r\n网页正文全文宽:" +document.body.scrollWidth; 
strInfo+=" \r\n网页正文全文高:" +document.body.scrollHeight; 
strInfo+=" \r\n网页被卷去的高:" +document.body.scrollTop; 
strInfo+=" \r\n网页被卷去的左:" +document.body.scrollLeft; 
strInfo+=" \r\n网页正文部分上:" +window.screenTop; 
strInfo+=" \r\n网页正文部分左:" +window.screenLeft; 
strInfo+=" \r\n屏幕分辨率的高:" +window.screen.height; 
strInfo+=" \r\n屏幕分辨率的宽:" +window.screen.width; 
strInfo+=" \r\n屏幕可用工作区高度:" +window.screen.availHeight; 
strInfo+=" \r\n屏幕可用工作区宽度:" +window.screen.availWidth; 
window.confirm(strInfo); 
</script>
Javascript 相关文章推荐
摘自百度的图片轮换效果代码
Nov 19 Javascript
Javascript打印网页部分内容的脚本
Nov 17 Javascript
jquery 操作DOM的基本用法分享
Apr 05 Javascript
完美解决IE低版本不支持call与apply的问题
Dec 05 Javascript
jQuery中parents()和parent()的区别分析
Oct 28 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
Sep 06 Javascript
JS实现自动变化的导航菜单效果代码
Sep 09 Javascript
JS+CSS实现简易实用的滑动门菜单效果
Sep 18 Javascript
js实现内容显示并使用json传输数据
Mar 16 Javascript
Javascrip实现文字跳动特效
Nov 27 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
Nov 30 Javascript
JavaScript实现矩形块大小任意缩放
Aug 25 Javascript
JSONP 跨域共享信息
Aug 16 #Javascript
js自执行函数的几种不同写法的比较
Aug 16 #Javascript
js三种排序算法分享
Aug 16 #Javascript
jQuery点击后一组图片左右滑动的实现代码
Aug 16 #Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 #Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
Aug 14 #Javascript
You might like
php全排列递归算法代码
2012/10/09 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
python中星号变量的几种特殊用法
2016/09/07 Python
python安装gdal的两种方法
2019/10/29 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
车间工艺员岗位职责
2013/12/09 职场文书
市场拓展计划书
2014/05/03 职场文书
国旗下演讲稿
2014/05/08 职场文书
中文专业求职信
2014/06/20 职场文书
个人年终总结开头
2015/03/06 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
入党心得体会
2019/06/20 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle