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 相关文章推荐
javascript级联下拉列表实例代码(自写)
May 10 Javascript
关于js中for in的缺陷浅析
Dec 02 Javascript
JQuery中$.ajax()方法参数详解及应用
Dec 12 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
js Date()日期函数浏览器兼容问题解决方法
Sep 12 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
Node.js + express基本用法教程
Mar 14 Javascript
微信小程序云开发 生成带参小程序码流程
May 18 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
Aug 02 Javascript
使用Vue调取接口,并渲染数据的示例代码
Oct 28 Javascript
JavaScript 定时器详情
Nov 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数字格式化
2006/12/06 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
用 JSON 处理缓存
2007/04/27 Javascript
动态样式类封装JS代码
2009/09/02 Javascript
Javascript学习笔记8 用JSON做原型
2010/01/11 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(二)
2016/02/16 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
require.js中的define函数详解
2017/07/10 Javascript
详解Nodejs 通过 fs.createWriteStream 保存文件
2017/10/10 NodeJs
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
党校学习自我鉴定
2014/02/24 职场文书
主管竞聘书范文
2014/03/31 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
高二化学教学反思
2016/02/22 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
vue项目中的支付功能实现(微信支付和支付宝支付)
2022/02/18 Vue.js