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 相关文章推荐
一个页面放2段图片滚动代码出现冲突的问题如何解决
Dec 21 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
JavaScript极简入门教程(一):基础篇
Oct 25 Javascript
JS组件Bootstrap Table使用实例分享
May 30 Javascript
AngularJs Forms详解及简单示例
Sep 01 Javascript
浅谈JS使用[ ]来访问对象属性
Sep 21 Javascript
VueJs使用Amaze ui调整列表和内容页面
Nov 30 Javascript
Vue 中mixin 的用法详解
Apr 23 Javascript
实例详解Node.js 函数
Jun 10 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
Aug 09 jQuery
javascript中call,apply,bind的区别详解
Dec 11 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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
js+div实现图片滚动效果代码
2014/02/10 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
JavaScript优化以及前段开发小技巧
2017/02/02 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
React中的refs的使用教程
2018/02/13 Javascript
angular 服务随记小结
2019/05/06 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
Python SQLite3数据库操作类分享
2014/06/10 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
浅谈Python 中整型对象的存储问题
2016/05/16 Python
python自动翻译实现方法
2016/05/28 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
python读取Excel表格文件的方法
2019/09/02 Python
python连接PostgreSQL过程解析
2020/02/09 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
python如何快速生成时间戳
2020/07/21 Python
python 实现性别识别
2020/11/21 Python
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
大学生社会实践方案
2014/05/11 职场文书
学校标语大全
2014/06/19 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
聘任合同书
2015/09/21 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
导游词之云南-元阳梯田
2019/10/08 职场文书
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
Java 异步任务计算FutureTask
2022/04/28 Java/Android
Python测试框架pytest高阶用法全面详解
2022/06/01 Python