利用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实现的动态文字变换
Jul 28 Javascript
面向对象的编程思想在javascript中的运用上部
Nov 20 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
Jun 19 Javascript
JQuery从头学起第二讲
Jul 04 Javascript
js jq 单击和双击区分示例介绍
Nov 05 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
Mar 04 Javascript
backbone简介_动力节点Java学院整理
Jul 14 Javascript
js单页hash路由原理与应用实战详解
Aug 14 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
May 03 Javascript
其实你可以少写点if else与switch(推荐)
Jan 10 Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 Javascript
原生js实现俄罗斯方块
Oct 20 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 define函数的使用说明
2008/08/27 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
PHP7新功能总结
2019/04/14 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
jQuery图片轮播的具体实现
2013/09/11 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
javascript移动开发中touch触摸事件详解
2016/03/18 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
Python中的作用域规则详解
2015/01/30 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
Django渲染Markdown文章目录的方法示例
2019/01/02 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
python实现的生成word文档功能示例
2019/08/23 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
Python截图并保存的具体实例
2021/01/14 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
大学毕业生自我鉴定
2013/11/05 职场文书
运动会通讯稿500字
2014/02/20 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
信用卡工作证明范本
2015/06/19 职场文书
python基础入门之字典和集合
2021/06/13 Python