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 相关文章推荐
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 Javascript
JavaScript 判断判断某个对象是Object还是一个Array
Jan 28 Javascript
JS运行耗时操作的延时显示方法
Nov 19 Javascript
Jquery 选中表格一列并对表格排序实现原理
Dec 15 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
Apr 06 Javascript
JQuery实现级联下拉框效果实例讲解
Sep 17 Javascript
JS 对象(Object)和字符串(String)互转方法
May 20 Javascript
jQuery、layer实现弹出层的打开、关闭功能
Jun 28 jQuery
JavaScript判断输入是否为数字类型的方法总结
Sep 28 Javascript
JavaScript onclick事件使用方法详解
May 15 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 smtp实现发送邮件功能
2017/06/22 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript学习笔记之获取当前目录的实现代码
2010/12/14 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
深入了解query和params的使用区别
2019/06/24 Javascript
mock.js模拟数据实现前后端分离
2019/07/24 Javascript
python多线程扫描端口示例
2014/01/16 Python
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
简述Python2与Python3的不同点
2018/01/21 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
python join方法使用详解
2019/07/30 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
会话Bean的种类
2013/11/07 面试题
学生鉴定评语大全
2014/05/05 职场文书
中学生检讨书范文
2014/11/03 职场文书
超强台风观后感
2015/06/09 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
mysql sql常用语句大全
2022/06/21 MySQL
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android