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 相关文章推荐
很全的显示阴历(农历)日期的js代码
Jan 01 Javascript
禁止JQuery中的load方法装载IE缓存中文件的方法
Sep 11 Javascript
javascript获得网页窗口实际大小的示例代码
Sep 21 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
Dec 14 Javascript
JQuery实现左右滚动菜单特效
Sep 28 Javascript
使用jquery.form.js实现图片上传的方法
May 05 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
薪资那么高的Web前端必看书单
Oct 13 Javascript
详解小程序横屏方案对比
Jun 28 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
Aug 20 Javascript
H5 js点击按钮复制文本到粘贴板
Nov 19 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
让你的PHP7更快之Hugepage用法分析
2016/05/31 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
PHP使用new StdClass()创建空对象的方法分析
2017/06/06 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
jQuery的one()方法用法实例
2015/01/19 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
JS判断图片是否加载完成方法汇总(最新版)
2016/05/13 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
NetworkX之Prim算法(实例讲解)
2017/12/22 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
个人实用简单的自我评价
2013/10/19 职场文书
大学生专科毕业生自我评价
2013/11/17 职场文书
小学老师寄语大全
2014/04/04 职场文书
财务负责人任命书
2014/06/06 职场文书
财产分割协议书范本
2014/11/03 职场文书
初中作文评语
2014/12/25 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
Redis入门教程详解
2021/08/30 Redis