利用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下阻止表单重复提交、防刷新、防后退
Aug 17 Javascript
JSON扫盲帖 JSON.as类教程
Feb 16 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
Oct 26 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
JavaScript中的DSL元编程介绍
Mar 15 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
Apr 03 Javascript
使用堆实现Top K算法(JS实现)
Dec 25 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
Sep 17 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
关于Vue中的options选项
Mar 22 Vue.js
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实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
简化版的vue-router实现思路详解
2018/10/19 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
Vue.js暴露方法给WebView的使用操作
2020/09/07 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
2020/10/29 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
Python性能优化的20条建议
2014/10/25 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
中专毕业生个人职业生涯规划
2014/02/19 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
幼儿园感恩节活动方案2014
2014/10/11 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js