利用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 相关文章推荐
jQuery实现原理的模拟代码 -6 代码下载
Aug 16 Javascript
使用jQuery避免鼠标双击的解决方案
Aug 21 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
Javascript实现的Map集合工具类完整实例
Jul 31 Javascript
实现非常简单的js双向数据绑定
Nov 06 Javascript
AngularJS入门教程之AngularJS模型
Apr 18 Javascript
前端微信支付js代码
Jul 25 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 jQuery
vue js秒转天数小时分钟秒的实例代码
Aug 08 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 jQuery
webpack 如何解析代码模块路径的实现
Sep 04 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
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之第八天
2006/10/09 PHP
多数据表共用一个页的新闻发布
2006/10/09 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP生成plist数据的方法
2015/06/16 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
mui 打开新窗口的方式总结及注意事项
2017/08/20 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
原生js实现贪吃蛇游戏
2020/10/26 Javascript
python获取mp3文件信息的方法
2015/06/15 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
Python如何输出百分比
2020/07/31 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
建筑专业自荐信范文
2014/01/05 职场文书
高中生家长会演讲稿
2014/01/14 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
网络编辑岗位职责
2014/03/18 职场文书
弄虚作假心得体会
2014/09/10 职场文书
工程承包协议书
2014/10/20 职场文书
2014年电工工作总结
2014/11/20 职场文书
先进事迹材料范文
2014/12/29 职场文书
运动会3000米加油稿
2015/07/21 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书