利用location.hash实现跨域iframe自适应


Posted in Javascript onMay 04, 2010

页面域关系:

主页面a.html所属域A:3water.com
被iframe的页面b.html所属域B:www.baidu.com,假设地址:http://www.baidu.com/b.html

实现效果:

A域名下的页面a.html中通过iframe嵌入B域名下的页面b.html,由于b.html的宽度和高度是不可预知而且会变化的,所以需要a.html中的iframe自适应大小.

问题本质:

js对跨域iframe访问问题,因为要控制a.html中iframe的高度和宽度就必须首先读取得到b.html的大小,A、B不属于同一个域,浏览器为了安全性考虑,使js跨域访问受限,读取不到b.html的高度和宽度.

解决方案:

引入代理代理页面c.html与a.html所属相同域A,c.html是A域下提供好的中间代理页面,假设c.html的地址:3water.com/c.html,它负责读取location.hash里面的width和height的值,然后设置与它同域下的a.html中的iframe的宽度和高度.

代码如下:

a.html代码

首先a.html中通过iframe引入了b.html

<iframe id=”b_iframe” height=”0″ width=”0″ src=”http://www.baidu.com/b.html” frameborder=”no” border=”0px” marginwidth=”0″ marginheight=”0″ scrolling=”no” allowtransparency=”yes” ></iframe>

b.html代码
<script type=”text/javascript”> 
var b_width = Math.max(document.documentElement.clientWidth,document.body.clientWidth); 
var b_height = Math.max(document.documentElement.clientHeight,document.body.clientHeight); 
var c_iframe = document.getElementById(”c_iframe”); 
c_iframe.src = c_iframe.src+”#”+b_width+”|”+b_height; //https://3water.com/c.html#width|height” 
} 
</script>

<!?js读取b.html的宽和高,把读取到的宽和高设置到和a.html在同一个域的中间代理页面车c.html的src的hash里面?>
<iframe id=”c_iframe” height=”0″ width=”0″ src=”https://3water.com/c.html” style=”display:none” ></iframe>

c.html代码

<script type=”text/javascript”> 
var b_iframe = parent.parent.document.getElementById(”b_iframe”); 
var hash_url = window.location.hash; 
var hash_width = hash_url.split(”#”)[1].split(”|”)[0]+”px”; 
var hash_height = hash_url.split(”#”)[1].split(”|”)[1]+”px”; 
b_iframe.style.width = hash_width; 
b_iframe.style.height = hash_height; 
</script>

a.html中的iframe就可以自适应为b.html的宽和高了.

其他一些类似js跨域操作问题也可以按这个思路去解决

如果不是跨域访问,可以参考这篇文章。iframe自适应高度的多种方法方法小结

Javascript 相关文章推荐
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
Sep 03 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
js中获取键盘事件的简单实现方法
Oct 10 Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 Javascript
原生JS轮播图插件
Feb 09 Javascript
JS实现中文汉字按拼音排序的方法
Oct 09 Javascript
VUE element-ui 写个复用Table组件的示例代码
Nov 18 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
May 18 Javascript
vue.js与后台数据交互的实例讲解
Aug 08 Javascript
Vue核心概念Action的总结
Jan 18 Javascript
详解TypeScript的基础类型
Feb 18 Javascript
Array.prototype 的泛型应用分析
Apr 30 #Javascript
jQuery 锚点跳转滚动条平滑滚动一句话代码
Apr 30 #Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
Apr 29 #Javascript
匹配任意字符的正则表达式写法
Apr 29 #Javascript
jquery ajax提交表单数据的两种实现方法
Apr 29 #Javascript
jQuery 动画弹出窗体支持多种展现方式
Apr 29 #Javascript
jQuery 工具函数学习资料
Apr 29 #Javascript
You might like
我的论坛源代码(十)
2006/10/09 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
html读出文本文件内容
2007/01/22 Javascript
js转义字符介绍
2013/11/05 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
Vue3为什么这么快
2020/09/23 Javascript
JavaScript如何操作css
2020/10/24 Javascript
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
python模拟鼠标拖动操作的方法
2015/03/11 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
python抓取网页中链接的静态图片
2018/01/29 Python
python 调试冷知识(小结)
2019/11/11 Python
Python3常见函数range()用法详解
2019/12/30 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
小学毕业寄语大全
2014/04/03 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
python 三边测量定位的实现代码
2021/04/22 Python
MySQL 全文检索的使用示例
2021/06/07 MySQL