利用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 相关文章推荐
通过修改referer下载文件的方法
May 11 Javascript
js左侧多级菜单动态的解决方案
Feb 01 Javascript
修复IE9&amp;safari 的sort方法
Oct 21 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
jquery图片滚动放大代码分享(1)
Aug 25 Javascript
表单验证正则表达式实例代码详解
Nov 09 Javascript
关于JS中的apply,call,bind的深入解析
Apr 05 Javascript
bootstrap输入框组代码分享
Jun 07 Javascript
Angular中使用$watch监听object属性值的变化(详解)
Apr 24 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
May 24 jQuery
JS作用域链详解
Jun 26 Javascript
JavaScript JSON使用原理及注意事项
Jul 30 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的call_user_func传reference引发的思考
2010/07/23 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
说说JSON和JSONP 也许你会豁然开朗
2012/09/02 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
2016/04/15 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
Summernote实现图片上传功能的简单方法
2016/07/11 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
2016/08/29 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
垃圾回收器的相关知识点总结
2018/05/13 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Django中几种重定向方法
2015/04/28 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
python如何为创建大量实例节省内存
2018/03/20 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
python urllib爬虫模块使用解析
2019/09/05 Python
Myholidays美国:在线旅游网站
2019/08/16 全球购物
澳大利亚床上用品、浴巾和家居用品购物网站:Bambury
2020/04/16 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
毕业自我鉴定
2013/11/05 职场文书
求职简历推荐信范文
2013/12/02 职场文书
教书育人演讲稿
2014/09/11 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
商业计划书范文
2019/04/24 职场文书
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python