利用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 相关文章推荐
从数据结构分析看:用for each...in 比 for...in 要快些
Apr 17 Javascript
JavaScript加强之自定义callback示例
Sep 21 Javascript
JavaScript学习笔记之DOM基础 2.4
Aug 14 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
May 27 Javascript
JavaScript的==运算详解
Jul 20 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
解决vue中对象属性改变视图不更新的问题
Feb 23 Javascript
Vue.directive 自定义指令的问题小结
Mar 04 Javascript
javascript实现文件拖拽事件
Mar 29 Javascript
微信小程序之swiper滑动面板用法示例
Dec 04 Javascript
JS二级菜单不同实现方法分析【4种方法】
Dec 21 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 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
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
yii操作session实例简介
2014/07/31 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
javascript Array.remove() 数组删除
2009/08/06 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
jquery中的on方法使用介绍
2013/12/29 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
管理部部长岗位职责
2013/12/05 职场文书
文字自荐书范文
2014/02/10 职场文书
股东合作协议书
2014/04/14 职场文书
人事主管岗位职责
2015/02/04 职场文书
部门主管竞聘书
2015/09/15 职场文书
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android